Beispiel #1
0
 public function getControllerInfo($controller_name)
 {
     return $this->getItemByField('controllers', 'name', $controller_name, function ($item) {
         $item['options'] = cmsModel::yamlToArray($item['options']);
         return $item;
     });
 }
Beispiel #2
0
 public function getPresetByName($name)
 {
     return $this->getItemByField('images_presets', 'name', $name, function ($item, $model) {
         $item['wm_image'] = cmsModel::yamlToArray($item['wm_image']);
         return $item;
     });
 }
Beispiel #3
0
 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']);
 }
Beispiel #4
0
 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');
 }
Beispiel #5
0
 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;
     });
 }
Beispiel #6
0
 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;
     });
 }
Beispiel #7
0
 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;
     });
 }
Beispiel #8
0
 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');
     }
 }
Beispiel #9
0
 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);
     }
 }
Beispiel #10
0
 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;
     });
 }
Beispiel #11
0
 /**
  * Загружает опции контроллера
  * @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;
 }
Beispiel #12
0
 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));
 }
Beispiel #13
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']);
 }
Beispiel #14
0
 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;
     });
 }
Beispiel #15
0
 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));
 }
Beispiel #16
0
/**
 * Возвращает путь к файлу изображения
 * @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;
}
Beispiel #17
0
 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;
 }
Beispiel #18
0
 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;
     });
 }
Beispiel #19
0
 /**
  * Возвращает пользователей групп, для которых переданное правило включено
  * или установлено в значение $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;
     });
 }
Beispiel #20
0
        ?>
                        <?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 
Beispiel #21
0
 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);
 }
Beispiel #22
0
 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'];
     });
 }
Beispiel #23
0
 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;
     });
 }
Beispiel #24
0
 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;
     });
 }
Beispiel #25
0
 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);
 }
Beispiel #26
0
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));
    }
}
Beispiel #27
0
    ?>
<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 
Beispiel #28
0
 public function getUserPrivacyOptions($id)
 {
     return $this->getItemById('{users}', $id, function ($item, $model) {
         return cmsModel::yamlToArray($item['privacy_options']);
     });
 }
Beispiel #29
0
 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;
     });
 }
Beispiel #30
0
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);
    }
}