public function getExtensions() { // Get catid, search filter, order column, order direction $cache = JFactory::getCache(); $cache->setCaching(1); $http = new JHttp(); $http->setOption('timeout', 60); $componentParams = JComponentHelper::getParams('com_apps'); $api_url = new JUri(); $default_limit = $componentParams->get('default_limit', 8); $input = new JInput(); $catid = $input->get('id', null, 'int'); $order = $input->get('ordering', $this->getOrderBy()); $orderCol = $this->state->get('list.ordering', $order); $orderDirn = $orderCol == 'core_title' ? 'ASC' : 'DESC'; $release = preg_replace('/[^\\d]/', '', base64_decode($input->get('release', '', 'base64'))); $limitstart = $input->get('limitstart', 0, 'int'); $limit = $input->get('limit', $default_limit, 'int'); $dashboard_limit = $componentParams->get('extensions_perrow') * 6; // 6 rows of extensions $search = str_replace('_', ' ', urldecode(trim($input->get('filter_search', null)))); $release = intval($release / 5) * 5; $api_url->setScheme('http'); $api_url->setHost('extensions.joomla.org/index.php'); $api_url->setvar('option', 'com_jed'); $api_url->setvar('controller', 'filter'); $api_url->setvar('view', 'extension'); $api_url->setvar('format', 'json'); $api_url->setvar('limit', $limit); $api_url->setvar('limitstart', $limitstart); $api_url->setvar('filter[approved]', '1'); $api_url->setvar('filter[published]', '1'); $api_url->setvar('extend', '0'); $api_url->setvar('order', $orderCol); $api_url->setvar('dir', $orderDirn); if ($search) { $api_url->setvar('searchall', urlencode($search)); } $extensions_json = $cache->call(array($http, 'get'), $api_url); $items = json_decode($extensions_json->body); $items = $items->data; // Populate array $extensions = array(0 => array(), 1 => array()); foreach ($items as $item) { $item->image = $this->getBaseModel()->getMainImageUrl($item); if ($search) { $extensions[1 - $item->foundintitle][] = $item; } else { $extensions[0][] = $item; } } return array_merge($extensions[0], $extensions[1]); }
public function getExtension() { // Get extension id $cache = JFactory::getCache(); $cache->setCaching(1); $http = new JHttp(); $http->setOption('timeout', 60); $api_url = new JUri(); $input = new JInput(); $id = $input->get('id', null, 'int'); $release = preg_replace('/[^\\d]/', '', base64_decode($input->get('release', '', 'base64'))); $release = intval($release / 5) * 5; $api_url->setScheme('http'); $api_url->setHost('extensions.joomla.org/index.php'); $api_url->setvar('option', 'com_jed'); $api_url->setvar('controller', 'filter'); $api_url->setvar('view', 'extension'); $api_url->setvar('format', 'json'); $api_url->setvar('filter[approved]', '1'); $api_url->setvar('filter[published]', '1'); $api_url->setvar('extend', '0'); $api_url->setvar('filter[id]', $id); $extension_json = $cache->call(array($http, 'get'), $api_url); // Create item $items = json_decode($extension_json->body); $item = $items->data[0]; $this->_catid = $item->core_catid->value; $item->image = $this->getBaseModel()->getMainImageUrl($item); $item->downloadurl = $item->download_integration_url->value; if (preg_match('/\\.xml\\s*$/', $item->downloadurl)) { $app = JFactory::getApplication(); $product = addslashes(base64_decode($app->input->get('product', '', 'base64'))); $release = preg_replace('/[^\\d\\.]/', '', base64_decode($app->input->get('release', '', 'base64'))); $dev_level = (int) base64_decode($app->input->get('dev_level', '', 'base64')); $updatefile = JPATH_ROOT . '/libraries/joomla/updater/update.php'; $fh = fopen($updatefile, 'r'); $theData = fread($fh, filesize($updatefile)); fclose($fh); $theData = str_replace('<?php', '', $theData); $theData = str_replace('$ver->PRODUCT', "'" . $product . "'", $theData); $theData = str_replace('$ver->RELEASE', "'" . $release . "'", $theData); $theData = str_replace('$ver->DEV_LEVEL', "'" . $dev_level . "'", $theData); eval($theData); $update = new JUpdate(); $update->loadFromXML($item->downloadurl); $package_url_node = $update->get('downloadurl', false); if (isset($package_url_node->_data)) { $item->downloadurl = $package_url_node->_data; } } $item->download_type = $this->getTypeEnum($item->download_integration_type->value); return array($item); }