@@ -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