Skip to content

Commit 5442d9c

Browse files
committed
Add a JSON api to get the latest core version of Backdrop.
1 parent 9e7bf4b commit 5442d9c

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

www/modules/custom/borg_project/borg_project.module

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,73 @@ function borg_project_project_release_release_xml_alter(&$release_xml, $release_
3131
);
3232
}
3333
}
34+
35+
/**
36+
* Implements hook_menu().
37+
*/
38+
function borg_project_menu() {
39+
$items['core/latest.json'] = array(
40+
'title' => 'AJAX Callback',
41+
'delivery callback' => 'backdrop_json_deliver',
42+
'page callback' => 'borg_project_core_latest',
43+
'access arguments' => array('access content'),
44+
'type' => MENU_CALLBACK,
45+
);
46+
return $items;
47+
}
48+
49+
/**
50+
* Page callback that returns JSON data using backdrop_json_output().
51+
*/
52+
function borg_project_core_latest() {
53+
$data = _borg_project_core_get_latest_cached();
54+
return backdrop_json_output($data);
55+
}
56+
57+
/**
58+
* Getter - with cache reset - for latest core version.
59+
*/
60+
function _borg_project_core_get_latest_cached($refresh = FALSE) {
61+
$cached = cache_get('backdrop_core_version_latest');
62+
$data = isset($cached->data) ? $cached->data : array();
63+
if (empty($data) || $refresh) {
64+
$data = _borg_project_core_build_latest();
65+
cache_set('backdrop_core_version_latest', $data);
66+
}
67+
return $data;
68+
}
69+
70+
/**
71+
* Getter for latest core version.
72+
*/
73+
function _borg_project_core_build_latest() {
74+
// Get the latest supported core release.
75+
$latest_nid = db_query("SELECT n.nid, prsv.recommended
76+
FROM {node} n
77+
LEFT JOIN {project_release_supported_versions} prsv
78+
ON n.nid = prsv.nid
79+
WHERE n.type = 'core_release'
80+
AND n.status = 1
81+
ORDER BY n.created DESC
82+
LIMIT 1")->fetchField();
83+
84+
$release_data = db_query("SELECT
85+
version,
86+
download_link,
87+
version_major as major,
88+
version_minor as minor,
89+
version_patch as patch,
90+
version_api
91+
FROM {project_release} pr
92+
WHERE nid = :nid", array(':nid' => $latest_nid))->fetchAssoc();
93+
94+
$data = array(
95+
'status' => 'success',
96+
'timestamp' => REQUEST_TIME,
97+
'items' => array(
98+
$release_data,
99+
),
100+
);
101+
102+
return $data;
103+
}

0 commit comments

Comments
 (0)