public function getControllerInfo($controller_name) { return $this->getItemByField('controllers', 'name', $controller_name, function ($item) { $item['options'] = cmsModel::yamlToArray($item['options']); return $item; }); }
public function getPresetByName($name) { return $this->getItemByField('images_presets', 'name', $name, function ($item, $model) { $item['wm_image'] = cmsModel::yamlToArray($item['wm_image']); return $item; }); }
public function store($value, $is_submitted, $old_value = null) { $config = cmsConfig::getInstance(); $files_model = cmsCore::getModel('files'); if ($value) { $file = cmsModel::yamlToArray($old_value); $path = $config->upload_path . $file['path']; @unlink($path); $files_model->deleteFile($file['id']); $old_value = null; } $uploader = new cmsUploader(); if (!$uploader->isUploaded($this->name)) { return $old_value; } $allowed_extensions = $this->getOption('extensions'); $max_size_mb = $this->getOption('max_size_mb'); if (!trim($allowed_extensions)) { $allowed_extensions = false; } if (!$max_size_mb) { $max_size_mb = 0; } $result = $uploader->upload($this->name, $allowed_extensions, $max_size_mb * 1048576); if (!$result['success']) { if (!empty($result['path'])) { $uploader->remove($result['path']); } cmsUser::addSessionMessage($result['error'], 'error'); return null; } $file = $files_model->registerFile($result['url'], $result['name']); return array('id' => $file['id'], 'url_key' => $file['url_key'], 'name' => $result['name'], 'size' => $result['size'], 'path' => $result['url']); }
public function run($id) { if (!$id) { cmsCore::error404(); } $content_model = cmsCore::getModel('content'); $ctype = $content_model->getContentType($id); $ctype = cmsEventsManager::hook("ctype_before_delete", $ctype); $content_model->deleteContentType($id); cmsEventsManager::hook("ctype_after_delete", $ctype); cmsCore::getModel('widgets')->deletePagesByName('content', "{$ctype['name']}.*"); $binded_widgets = $content_model->get('widgets_bind', function ($item, $model) { $item['options'] = cmsModel::yamlToArray($item['options']); return $item; }); if ($binded_widgets) { foreach ($binded_widgets as $widget) { if (isset($widget['options']['ctype_id']) && $ctype['id'] == $widget['options']['ctype_id']) { $content_model->delete('widgets_bind', $widget['id']); } } } cmsCore::getController('activity')->deleteType('content', "add.{$ctype['name']}"); $this->redirectToAction('ctypes'); }
private function feed() { return $this->getItem('rss_feeds', function ($item, $model) { $item['mapping'] = cmsModel::yamlToArray($item['mapping']); $item['image'] = cmsModel::yamlToArray($item['image']); return $item; }); }
public function getControllerInfo($controller_name) { return $this->getItemByField('controllers', 'name', $controller_name, function ($item) { $item['options'] = cmsModel::yamlToArray($item['options']); $item['title'] = string_lang($item['name'] . '_CONTROLLER', $item['title']); return $item; }); }
public function getFeedByCtypeName($ctype_name) { return $this->filterEqual('ctype_name', $ctype_name)->getItem('rss_feeds', function ($item, $model) { $item['mapping'] = cmsModel::yamlToArray($item['mapping']); $item['image'] = cmsModel::yamlToArray($item['image']); return $item; }); }
private static function loadControllers() { if (!isset(self::$controllers)) { $model = new cmsModel(); self::$controllers = $model->useCache('controllers')->get('controllers', function ($item, $model) { $item['options'] = cmsModel::yamlToArray($item['options']); return $item; }, 'name'); } }
public function __construct() { $config = cmsConfig::getInstance(); $this->groups = array(GUEST_GROUP_ID); $this->ip = self::getIp(); self::loadOnlineUsersIds(); if (self::isSessionSet('user:id')) { // уже авторизован $this->id = self::sessionGet('user:id'); } elseif (self::getCookie('auth')) { // пробуем авторизовать по кукису $this->id = self::autoLogin(self::getCookie('auth')); } self::deleteOldSessions($this->id); // // если авторизован, заполняем объект данными из базы // if ($this->id) { $model = cmsCore::getModel('users'); $user = $model->getUser($this->id); if (!$user) { self::logout(); return; } // если дата последнего визита еще не сохранена в сессии, // значит авторизация была только что // сохраним дату в сессии и обновим в базе if (!self::isSessionSet('user:date_log')) { self::sessionSet('user:date_log', $user['date_log']); $model->update('{users}', $this->id, array('date_log' => null), true); } // заполняем объект данными из базы foreach ($user as $field => $value) { $this->{$field} = $value; } // конвертим список аватаров в массив // к пути каждого аватара добавляем путь корня $this->avatar = cmsModel::yamlToArray($this->avatar); if ($this->avatar) { foreach ($this->avatar as $size => $path) { $this->avatar[$size] = $config->upload_host . '/' . $path; } } // кешируем список друзей в сессию $this->recacheFriends(); // создаем online-сессию self::createSession($this->id); // восстанавливаем те поля, которые не должны // изменяться в течении сессии $this->date_log = self::sessionGet('user:date_log'); $this->perms = self::getPermissions($user['groups'], $user['id']); $this->is_logged = true; cmsEventsManager::hook('user_loaded', $user); } }
public function getPhoto($id) { $this->select('u.nickname', 'user_nickname'); $this->select('u.avatar', 'user_avatar'); $this->join('{users}', 'u', 'u.id = i.user_id'); return $this->getItemById('photos', $id, function ($item, $model) { $item['user'] = array('id' => $item['user_id'], 'nickname' => $item['user_nickname'], 'avatar' => $item['user_avatar']); $item['image'] = cmsModel::yamlToArray($item['image']); return $item; }); }
/** * Загружает опции контроллера * @param string $controller_name * @return array */ static function loadOptions($controller_name) { if (isset(self::$options_cache[$controller_name])) { return self::$options_cache[$controller_name]; } $model = new cmsModel(); $model->filterEqual('name', $controller_name); $options = $model->getFieldFiltered('controllers', 'options'); if ($options) { $options = cmsModel::yamlToArray($options); self::$options_cache[$controller_name] = $options; } return $options; }
public function getInput($value) { $users_model = cmsCore::getModel('users'); $items = $this->getProperty('show_all') ? array(0 => LANG_ALL) : array(); $is_show_guests = (bool) $this->getProperty('show_guests'); $groups = $users_model->getGroups($is_show_guests); foreach ($groups as $group) { $items[$group['id']] = $group['title']; } $this->data['groups'] = $items; if (!is_array($value)) { $value = cmsModel::yamlToArray($value); } return parent::getInput($value ? $value : array(0)); }
public function deleteGroup($group) { $this->deleteGroupMemberships($group['id']); $this->deleteGroupInvites($group['id']); cmsCache::getInstance()->clean('groups.list'); if ($group['logo']) { if (!is_array($group['logo'])) { $group['logo'] = cmsModel::yamlToArray($group['logo']); } $config = cmsConfig::getInstance(); foreach ($group['logo'] as $image_url) { $image_path = $config->upload_path . $image_url; @unlink($image_path); } } return $this->delete('groups', $group['id']); }
public function run() { $sources['photos'] = LANG_PHOTOS; // по каким полям поиск $match_fields['photos'] = array('title', 'content'); // какие поля получать $select_fields['photos'] = array('id', 'content', 'image', 'slug', 'date_pub', 'title', 'rating', 'comments', 'user_id', 'sizes', 'hits_count'); // из каких таблиц выборка $table_names['photos'] = 'photos'; // получаем тут высоту строк, чтобы в шаблоне потом забрать $this->getRowHeight(); return array('name' => $this->name, 'sources' => $sources, 'table_names' => $table_names, 'match_fields' => $match_fields, 'select_fields' => $select_fields, 'filters' => array('photos' => array()), 'item_callback' => function ($item, $model, $sources_name, $match_fields, $select_fields) { $item['image'] = cmsModel::yamlToArray($item['image']); $item['sizes'] = cmsModel::yamlToArray($item['sizes']); $item['title'] = strip_tags($item['title']); return $item; }); }
public function run($id) { $menu_model = cmsCore::getModel('menu'); $form = $this->getForm('menu', array('edit')); $menu = $menu_model->getMenu($id); if ($menu['is_fixed']) { $form->removeField('basic', 'name'); } if ($this->request->has('submit')) { $new_menu = $form->parse($this->request, true); $errors = $form->validate($this, $new_menu); if (!$errors) { $menu_model->updateMenu($id, $new_menu); cmsUser::setCookiePublic('menu_tree_path', "{$id}.0"); // обновление виджетов меню, в которых используется это меню if ($menu['name'] !== $new_menu['name']) { $widgets_model = cmsCore::getModel('widgets'); $w_binds = $widgets_model->join('widgets', 'w', 'w.id = i.widget_id')->filterEqual('w.name', 'menu')->get('widgets_bind', function ($item, $model) { $item['options'] = cmsModel::yamlToArray($item['options']); return $item; }); foreach ($w_binds as $w_bind) { if (isset($w_bind['options']['menu']) && $w_bind['options']['menu'] === $menu['name']) { $new = array('options' => $w_bind['options']); $new['options']['menu'] = $new_menu['name']; $widgets_model->updateWidgetBinding($w_bind['id'], $new); } } } $this->redirectToAction('menu'); } if ($errors) { cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error'); } $menu = $new_menu; } return $this->cms_template->render('menu_form', array('do' => 'edit', 'item' => $menu, 'form' => $form, 'errors' => isset($errors) ? $errors : false)); }
/** * Возвращает путь к файлу изображения * @param array|yaml $image Все размеры заданного изображения * @param string $size_preset Название пресета * @param bool $is_add_host Возвращать путь отностительно директории хранения или полный путь * @param bool $is_relative Возвращать относительный путь или всегда с полным url * @return boolean|string */ function html_image_src($image, $size_preset = 'small', $is_add_host = false, $is_relative = true) { $config = cmsConfig::getInstance(); if (!is_array($image)) { $image = cmsModel::yamlToArray($image); } if (!$image) { return false; } $keys = array_keys($image); if ($keys[0] === 0) { $image = $image[0]; } if (isset($image[$size_preset])) { $src = $image[$size_preset]; } else { return false; } if ($is_add_host && !strstr($src, $config->upload_host)) { if ($is_relative) { $src = $config->upload_host . '/' . $src; } else { $src = $config->upload_host_abs . '/' . $src; } } return $src; }
public function getCommentsModerators() { // сначала ищем юзеров, которым разрешено модерировать $moderators = cmsPermissions::getRulesGroupMembers('comments', 'is_moderator'); if (!$moderators) { // не нашли модераторов, получаем администраторов $moderators = $this->filterEqual('is_admin', 1)->selectList(array('i.id' => 'id', 'i.notify_options' => 'notify_options', 'i.email' => 'email', 'i.nickname' => 'nickname', 'i.avatar' => 'avatar'), true)->get('{users}', function ($item, $model) { $item['notify_options'] = cmsModel::yamlToArray($item['notify_options']); $item['is_online'] = cmsUser::userIsOnline($item['id']); return $item; }); } return $moderators; }
public function getContentDataset($id) { return $this->getItemById('content_datasets', $id, function ($item, $model) { $item['groups_view'] = cmsModel::yamlToArray($item['groups_view']); $item['groups_hide'] = cmsModel::yamlToArray($item['groups_hide']); $item['filters'] = cmsModel::yamlToArray($item['filters']); $item['sorting'] = cmsModel::yamlToArray($item['sorting']); return $item; }); }
/** * Возвращает пользователей групп, для которых переданное правило включено * или установлено в значение $value * * @param string $controller Название компонента * @param string $name Название правила * @param mixed $value Значение правила. Если не передано, значение не учитывается * @param string $subject Субъект правила. Если не передан, то одинаков с компонентом * * @return array Массив пользователей с данными: id, email, nickname, avatar, notify_options, is_online */ static function getRulesGroupMembers($controller, $name, $value = false, $subject = false) { if (!$subject) { $subject = $controller; } $model = new cmsModel(); $rule = $model->filterEqual('controller', $controller)->filterEqual('name', $name)->getItem('perms_rules'); if (!$rule) { return array(); } $model->filterEqual('subject', $subject)->filterEqual('rule_id', $rule['id']); if ($value) { $model->filterEqual('value', $value); } $groups_ids = $model->selectOnly('group_id')->get('perms_users', function ($item, $model) { return $item['group_id']; }, 'group_id'); if (!$groups_ids) { return array(); } return $model->filterIn('group_id', $groups_ids)->selectOnly('user_id', 'id')->joinUser('user_id', array('u.notify_options' => 'notify_options', 'u.email' => 'email', 'u.nickname' => 'nickname', 'u.avatar' => 'avatar'))->get('{users}_groups_members', function ($item, $model) { $item['notify_options'] = cmsModel::yamlToArray($item['notify_options']); $item['is_online'] = cmsUser::userIsOnline($item['id']); return $item; }); }
?> <?php if (!empty($feed['mapping']['pubDate'])) { ?> <pubDate><?php html(date('r', strtotime($item[$feed['mapping']['pubDate']]))); ?> </pubDate> <?php } ?> <?php if (!empty($feed['mapping']['image'])) { ?> <?php $image = cmsModel::yamlToArray($item[$feed['mapping']['image']]); ?> <?php if (!empty($image[$feed['mapping']['image_size']])) { ?> <enclosure url="<?php echo cmsConfig::get('upload_host_abs') . '/' . $image[$feed['mapping']['image_size']]; ?> " /> <?php } ?> <?php } ?> <link><?php
public function getInput($value) { $this->data['images'] = false; if ($value) { $this->data['images'] = is_array($value) ? $value : cmsModel::yamlToArray($value); } $this->data['sizes'] = $this->getOption('sizes'); $this->data['images_controller'] = cmsCore::getController('images'); return parent::getInput($value); }
public function getUPS($key, $user_id) { $this->useCache('users.ups'); $this->filterEqual('user_id', $user_id)->filterEqual('skey', $key); return $this->getItem('{users}_personal_settings', function ($item, $model) { if (strpos($item['settings'], '---') === 0) { $item['settings'] = cmsModel::yamlToArray($item['settings']); } return $item['settings']; }); }
public function getMenuItem($id) { return $this->getItemById('menu_items', $id, function ($item, $model) { if ($item['options']) { $item['options'] = cmsModel::yamlToArray($item['options']); } else { $item['options'] = array(); } $item['groups_view'] = cmsModel::yamlToArray($item['groups_view']); $item['groups_hide'] = cmsModel::yamlToArray($item['groups_hide']); return $item; }); }
public function getCategoriesTree($ctype_name, $is_show_root = true) { $table_name = $this->table_prefix . $ctype_name . '_cats'; if (!$is_show_root) { $this->filterGt('parent_id', 0); } $this->orderBy('ns_left'); $this->useCache("content.categories"); return $this->get($table_name, function ($node, $model) { if ($node['ns_level'] == 0) { $node['title'] = LANG_ROOT_CATEGORY; } if (!empty($node['allow_add'])) { $node['allow_add'] = cmsModel::yamlToArray($node['allow_add']); } return $node; }); }
public function loadOptions() { if (!$this->hasOptions()) { return false; } $options_file = cmsConfig::get('root_path') . "system/config/theme_{$this->name}.yml"; if (!file_exists($options_file)) { return array(); } $options_yaml = @file_get_contents($options_file); return cmsModel::yamlToArray($options_yaml); }
function install_package() { $core = cmsCore::getInstance(); $content_model = cmsCore::getModel('content'); $remove_table_indexes = array('{users}_friends' => array('is_mutual', 'friend_id', 'user_id'), 'tags_bind' => array('tag_id')); $add_table_indexes = array('{users}_friends' => array('user_id' => array('user_id', 'is_mutual'), 'friend_id' => array('friend_id', 'is_mutual')), 'tags_bind' => array('tag_id' => array('tag_id'))); // все таблицы // удаляем ненужные индексы foreach ($remove_table_indexes as $table => $ri) { foreach ($ri as $index_name) { $core->db->dropIndex($table, $index_name); } } // добавляем нужные foreach ($add_table_indexes as $table => $indexes) { foreach ($indexes as $index_name => $fields) { $core->db->addIndex($table, $fields, $index_name); } } //************************************************************************// // типы контента $ctypes = $content_model->getContentTypes(); $varchar_fields = array('seo_keys', 'seo_desc', 'seo_title'); $remove_ctype_indexes = array('_cats' => array('ns_left', 'ns_right', 'ns_differ', 'ns_ignore', 'parent_id'), '_props_bind' => array('cat_id', 'ordering'), '' => array('date_pub', 'user_id', 'parent_id', 'parent_type', 'is_comments_on', 'is_approved', 'date_approved', 'comments', 'rating', 'is_private', 'is_parent_hidden', 'photos_count', 'date_pub_end', 'date_last_modified', 'title')); $add_ctype_indexes = array('_cats' => array('ns_left' => array('ns_level', 'ns_right', 'ns_left'), 'parent_id' => array('parent_id', 'ns_left')), '_props_bind' => array('ordering' => array('cat_id', 'ordering')), '' => array('date_pub' => array('is_pub', 'is_parent_hidden', 'is_approved', 'date_pub'), 'parent_id' => array('parent_id', 'parent_type', 'date_pub'), 'user_id' => array('user_id', 'date_pub'), 'date_pub_end' => array('date_pub_end'))); $add_ctype_fulltext_indexes = array('' => array('title' => array('title'))); foreach ($ctypes as $ctype) { // меняем типы сео полям foreach ($varchar_fields as $varchar_field) { $core->db->query("ALTER TABLE `{#}{$content_model->table_prefix}{$ctype['name']}` CHANGE `{$varchar_field}` `{$varchar_field}` VARCHAR( 256 ) NULL DEFAULT NULL;"); $core->db->query("ALTER TABLE `{#}{$content_model->table_prefix}{$ctype['name']}_cats` CHANGE `{$varchar_field}` `{$varchar_field}` VARCHAR( 256 ) NULL DEFAULT NULL;"); } // комментарии по умолчанию включены $core->db->query("ALTER TABLE `{#}{$content_model->table_prefix}{$ctype['name']}` CHANGE `is_comments_on` `is_comments_on` TINYINT( 1 ) UNSIGNED NULL DEFAULT '1'"); // для текущих записей включаем их $core->db->query("UPDATE `{#}{$content_model->table_prefix}{$ctype['name']}` SET `is_comments_on` = '1'"); // удаляем ненужные индексы foreach ($remove_ctype_indexes as $table_postfix => $rcci) { foreach ($rcci as $index_name) { $core->db->dropIndex($content_model->table_prefix . $ctype['name'] . $table_postfix, $index_name); } } // добавляем нужные обычные индексы foreach ($add_ctype_indexes as $table_postfix => $indexes) { foreach ($indexes as $index_name => $fields) { $core->db->addIndex($content_model->table_prefix . $ctype['name'] . $table_postfix, $fields, $index_name); } } // добавляем FULLTEXT индексы только для поля title. остальные поля включаются в индекс в настройках foreach ($add_ctype_fulltext_indexes as $table_postfix => $fulltext_indexes) { foreach ($fulltext_indexes as $index_name => $fields) { $core->db->addIndex($content_model->table_prefix . $ctype['name'] . $table_postfix, $fields, $index_name, 'FULLTEXT'); } } } if (!$core->db->isFieldExists('content_datasets', 'index')) { $core->db->query("ALTER TABLE `{#}content_datasets` ADD `index` VARCHAR(40) NULL DEFAULT NULL COMMENT 'Название используемого индекса' AFTER `sorting`, ADD INDEX (`index`);"); } if (!$core->db->isFieldExists('controllers', 'is_external')) { $core->db->query("ALTER TABLE `{#}controllers` ADD `is_external` TINYINT(1) UNSIGNED NULL DEFAULT NULL COMMENT 'Сторонний компонент' AFTER `is_backend`"); } if (!$core->db->isFieldExists('rss_feeds', 'template')) { $core->db->query("ALTER TABLE `{#}rss_feeds` ADD `template` VARCHAR(30) NOT NULL DEFAULT 'feed' COMMENT 'Шаблон ленты';"); } if (!$core->db->isFieldExists('images_presets', 'quality')) { $core->db->query("ALTER TABLE `{#}images_presets` ADD `quality` TINYINT(1) NOT NULL DEFAULT '90';"); } if (!$core->db->getRowsCount('perms_rules', "controller = 'content' AND name = 'disable_comments'", 1)) { $core->db->query("INSERT INTO `{#}perms_rules` (`controller`,`name`,`type`,`options`) VALUES ('content','disable_comments','flag', NULL)"); } $core->db->query("UPDATE `{#}perms_rules` SET `options` = 'own,all,full_delete' WHERE controller = 'comments' AND name = 'delete'"); // для всех датасетов создаем индексы, если нужно $datasets = $content_model->select('ct.name', 'ctype_name')->joinInner('content_types', 'ct', 'ct.id = i.ctype_id')->get('content_datasets', function ($item, $model) { $item['filters'] = cmsModel::yamlToArray($item['filters']); $item['sorting'] = cmsModel::yamlToArray($item['sorting']); return $item; }); if ($datasets) { foreach ($datasets as $dataset) { $index = $content_model->addContentDatasetIndex($dataset, $dataset['ctype_name']); $content_model->update('content_datasets', $dataset['id'], array('index' => $index), true); } } $config = cmsConfig::getInstance(); $values = $config->getAll(); $values['db_engine'] = 'InnoDB'; if (!$config->save($values)) { cmsUser::addSessionMessage('Не могу записать файл конфигурации сайта. Добавьте в него строку <b>"db_engine" => "InnoDB",</b>', 'info'); } // если вдруг для каких то компонентов нет конфига в таблице cms_controllers // пропускаем компонент карты сайта, т.к. там конфиг динамический // будем надеяться, что опции в нем хоть раз сохранялись =) $controllers = $content_model->filterNotEqual('name', 'sitemap')->get('controllers', function ($item, $model) { $item['options'] = cmsModel::yamlToArray($item['options']); return $item; }, 'name'); foreach ($controllers as $controller) { $controller_root_path = cmsConfig::get('root_path') . 'system/controllers/' . $controller['name'] . '/'; $form_file = $controller_root_path . 'backend/forms/form_options.php'; $form_name = $controller['name'] . 'options'; cmsCore::loadControllerLanguage($controller['name']); $form = cmsForm::getForm($form_file, $form_name, false); if ($form) { $options = $form->parse(new cmsRequest(cmsController::loadOptions($controller['name']))); } else { $options = null; } $content_model->filterEqual('name', $controller['name'])->updateFiltered('controllers', array('options' => $options)); } }
?> <label for="<?php echo $field->id; ?> "><?php echo $field->title; ?> </label><?php } ?> <?php if ($value) { ?> <?php $file = is_array($value) ? $value : cmsModel::yamlToArray($value); ?> <div id="file_<?php echo $field->element_name; ?> " class="value"> <span class="name"> <a href="<?php echo $field->getDownloadURL($file); ?> "><?php echo $file['name']; ?> </a> </span> <span class="size"><?php
public function getUserPrivacyOptions($id) { return $this->getItemById('{users}', $id, function ($item, $model) { return cmsModel::yamlToArray($item['privacy_options']); }); }
public function getWidgetsForPages($pages_list) { $this->useCache('widgets.bind'); return $this->select('w.controller', 'controller')->select('w.name', 'name')->join('widgets', 'w', 'w.id = i.widget_id')->filterIn('page_id', $pages_list)->orderBy('page_id, position, ordering')->get('widgets_bind', function ($item, $model) { $item['options'] = cmsModel::yamlToArray($item['options']); $item['groups_view'] = cmsModel::yamlToArray($item['groups_view']); $item['groups_hide'] = cmsModel::yamlToArray($item['groups_hide']); return $item; }); }
function migratePhotos() { $model = cmsCore::getModel('photos'); $config = cmsConfig::getInstance(); $photos = $model->orderByList(array(array('by' => 'album_id', 'to' => 'asc'), array('by' => 'date_pub', 'to' => 'asc')))->limit(false)->get('photos', function ($item, $model) { $item['image'] = cmsModel::yamlToArray($item['image']); return $item; }); if (!$photos) { return false; } $album_ids = $last_photo_id = $order = array(); foreach ($photos as $photo) { $album_ids[] = $photo['album_id']; $_order = isset($order[$photo['album_id']]) ? $order[$photo['album_id']] : 1; $_widths = $_heights = $sizes = $width_presets = array(); foreach ($photo['image'] as $preset => $path) { if (!is_readable($config->upload_path . $path)) { continue; } $s = getimagesize($config->upload_path . $path); if ($s === false) { continue; } $_widths[] = $s[0]; $_heights[] = $s[1]; $sizes[$preset] = array('width' => $s[0], 'height' => $s[1]); $width_presets[$s[0]] = $preset; } $order[$photo['album_id']] = $_order + 1; $last_photo_id[$photo['album_id']] = $photo['id']; // exif $max_size_preset = $width_presets[max($_widths)]; $image_data = img_get_params($config->upload_path . $photo['image'][$max_size_preset]); $date_photo = isset($image_data['exif']['date']) ? $image_data['exif']['date'] : false; $camera = isset($image_data['exif']['camera']) ? $image_data['exif']['camera'] : null; unset($image_data['exif']['date'], $image_data['exif']['camera'], $image_data['exif']['orientation']); $photo['slug'] = $model->getPhotoSlug($photo); $photo['sizes'] = $sizes; $photo['height'] = max($_heights); $photo['width'] = max($_widths); $photo['ordering'] = $_order; $photo['orientation'] = $image_data['orientation']; $photo['date_photo'] = $date_photo; $photo['camera'] = $camera; $photo['exif'] = !empty($image_data['exif']) ? $image_data['exif'] : null; $model->filterEqual('id', $photo['id'])->updateFiltered('photos', $photo); } $album_ids = array_unique($album_ids); foreach ($album_ids as $album_id) { cmsCache::getInstance()->clean("photos.{$album_id}"); $model->updateAlbumCoverImage($album_id, array($last_photo_id[$album_id])); $model->updateAlbumPhotosCount($album_id); } }