Файл: system/controllers/admin/actions/addons_list.php
Строк: 169
<?php
class actionAdminAddonsList extends cmsAction {
public function run(){
if(!function_exists('curl_init')){
return $this->cms_template->render('addons_list', array(
'error_text' => LANG_CP_ADDONS_CURL_ERROR
));
}
$dataset_id = $this->request->get('dataset_id', 0);
$cat_id = $this->request->get('cat_id', 0);
$page = $this->request->get('page', 0);
$is_paid = $this->request->get('is_paid', 0);
$title = $this->request->get('title', '');
if ($this->request->isAjax()) {
$params = array('branch' => 2);
if($dataset_id > 0){
$params['dataset_id'] = $dataset_id;
}
if($dataset_id < 0){
$installed_ids = $this->model->getInstalledAddonsIds();
if(!$installed_ids){
return $this->cms_template->renderPlain('addons_list_data', array(
'count' => 0,
'has_next' => 0,
'items' => false
));
}
$params['ids'] = implode(',', $installed_ids);
}
if($cat_id){
$params['cat_id'] = $cat_id;
}
if($page){
$params['page'] = $page;
}
if($title){
$params['title'] = $title;
}
if($is_paid){
$params['is_paid'][] = $is_paid - 1;
}
$items = $this->getAddonsMethod('content.get.addons', $params);
if(empty($items['response']['items'])){
return $this->cms_template->renderPlain('addons_list_data', array(
'count' => 0,
'has_next' => 0,
'items' => false
));
}
$items['response']['items'] = $this->checkInstalledPackages($items['response']['items']);
return $this->cms_template->renderPlain('addons_list_data', array(
'count' => $items['response']['count'],
'has_next' => (int) $items['response']['paging']['has_next'],
'items' => (empty($items['response']['items']) ? array() : $items['response']['items']),
'core_version' => cmsCore::getVersion()
));
}
$datasets = $this->getAddonsMethod('content.get_datasets.addons', array(), true);
if(!empty($datasets['response']['items']) && $dataset_id == 0){
$first_dataset = reset($datasets['response']['items']);
$dataset_id = $first_dataset['id'];
}
$cats = $this->getAddonsMethod('content.get_categories.addons', array(), true);
if(!$datasets || !$cats){
return $this->cms_template->render('addons_list', array(
'error_text' => LANG_CP_ADDONS_DATA_ERROR
));
}
$datasets = (isset($datasets['response']['items']) ? $datasets['response']['items'] : array());
$datasets['update'] = array(
'id' => -1,
'name' => 'installed',
'title' => LANG_CP_ADDDONS_DS_INSTALLED
);
return $this->cms_template->render('addons_list', array(
'error_text' => false,
'dataset_id' => $dataset_id,
'cat_id' => $cat_id,
'datasets' => $datasets,
'cats' => (isset($cats['response']['items']) ? $cats['response']['items'] : array())
));
}
private function checkInstalledPackages($items) {
$ids = array();
foreach ($items as $item) {
$ids[$item['type_raw']][] = $item['id'];
}
if(!empty($ids[1])){
$controllers = $this->model->selectOnly('name')->select('id')->
select('addon_id')->select('version')->filterIn('addon_id', $ids[1])->
get('controllers', false, 'addon_id');
}
if(!empty($ids[2])){
$widgets = $this->model->selectOnly('id')->select('name')->
select('addon_id')->select('version')->filterIn('addon_id', $ids[2])->
get('widgets', false, 'addon_id');
}
$result_items = array();
foreach ($items as $key => $item) {
$latest_version = reset($item['versions']);
$item['install'] = array(
'need_update' => false,
'need_install' => true,
'install_url' => ($item['versions'] ? 'https://addons.instantcms.ru/addons/download/'.$item['id'].'/'.$latest_version['id'] : ''),
'installed_url' => '',
'install_title' => LANG_CP_DO_INSTALL
);
$installed = false;
if(isset($controllers[$item['id']])){
$installed = $controllers[$item['id']];
} else if(isset($widgets[$item['id']])){
$installed = $widgets[$item['id']];
}
if($installed){
$version_compare = version_compare($latest_version['name'], $installed['version']);
if($version_compare == 0){
$item['install']['need_install'] = false;
$item['install']['install_url'] = '';
$item['install']['installed_url'] = $item['type_raw'] == 2 ? href_to('admin', 'widgets') : href_to('admin', 'controllers', array('edit', $installed['name']));
}
if($version_compare > 0){
$versions = array_keys($item['versions']);
$installed_key = array_search($installed['version'], $versions);
// версию нашли
if($installed_key !== false){
$prev_key = $installed_key - 1;
} else {
// версия есть, но её нет :)
// значит у автора дополнения версия в манифесте и версия в каталоге не совпадают
$prev_key = 0;
}
$next_version = $item['versions'][$versions[$prev_key]];
$item['install']['need_install'] = false;
$item['install']['need_update'] = true;
$item['install']['install_title'] = LANG_CP_DO_UPDATE;
$item['install']['install_url'] = 'https://addons.instantcms.ru/addons/download_patch/'.$item['id'].'/'.$next_version['id'];
}
}
$result_items[$key] = $item;
}
return $result_items;
}
}