コード例 #1
0
ファイル: feed.php プロジェクト: asphix/icms2
 public function run($ctype_name = false)
 {
     if (!$ctype_name) {
         cmsCore::error404();
     }
     $feed = $this->model->getFeedByCtypeName($ctype_name);
     if (!$feed || !$feed['is_enabled']) {
         cmsCore::error404();
     }
     $category_id = $this->request->get('category', false);
     $user_id = $this->request->get('user', false);
     $content_model = cmsCore::getModel('content');
     if ($category_id) {
         $category = $content_model->getCategory($ctype_name, $category_id);
     }
     if ($user_id) {
         $author = cmsCore::getModel('users')->getUser($user_id);
     }
     if (!empty($category)) {
         $content_model->filterCategory($ctype_name, $category, true);
     }
     if (!empty($author)) {
         $content_model->filterEqual('user_id', $user_id);
     }
     $content_model->orderBy('id', 'desc')->limit($feed['limit']);
     $feed['items'] = $content_model->getContentItems($ctype_name);
     $feed = cmsEventsManager::hook('before_render_' . $ctype_name . '_feed_list', $feed);
     header('Content-type: application/rss+xml; charset=utf-8');
     return cmsTemplate::getInstance()->renderPlain('feed', array('feed' => $feed, 'category' => isset($category) ? $category : false, 'author' => isset($author) ? $author : false));
 }
コード例 #2
0
ファイル: ctypes_datasets_add.php プロジェクト: pin-git/icms2
 public function run($ctype_id)
 {
     if (!$ctype_id) {
         cmsCore::error404();
     }
     $content_model = cmsCore::getModel('content');
     $ctype = $content_model->getContentType($ctype_id);
     if (!$ctype) {
         cmsCore::error404();
     }
     $form = $this->getForm('ctypes_dataset', array('add', $ctype['id']));
     $is_submitted = $this->request->has('submit');
     $fields = $content_model->getContentFields($ctype['name']);
     $dataset = array('sorting' => array(array('by' => 'date_pub', 'to' => 'desc')));
     if ($is_submitted) {
         $dataset = $form->parse($this->request, $is_submitted);
         $dataset['filters'] = $this->request->get('filters');
         $dataset['sorting'] = $this->request->get('sorting');
         $errors = $form->validate($this, $dataset);
         if (!$errors) {
             $dataset_id = $content_model->addContentDataset($dataset, $ctype);
             if ($dataset_id) {
                 cmsUser::addSessionMessage(sprintf(LANG_CP_DATASET_CREATED, $dataset['title']), 'success');
             }
             $this->redirectToAction('ctypes', array('datasets', $ctype['id']));
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('ctypes_dataset', array('do' => 'add', 'ctype' => $ctype, 'dataset' => $dataset, 'fields' => $fields, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #3
0
ファイル: edit.php プロジェクト: asphix/icms2
 public function run($tag_id)
 {
     if (!$tag_id) {
         cmsCore::error404();
     }
     $tags_model = cmsCore::getModel('tags');
     $form = $this->getForm('tag');
     $is_submitted = $this->request->has('submit');
     $tag = $tags_model->getTag($tag_id);
     $original_tag = $tag['tag'];
     if ($is_submitted) {
         $tag = $form->parse($this->request, $is_submitted);
         $errors = $form->validate($this, $tag);
         if ($original_tag == $tag['tag']) {
             $this->redirectToAction();
         }
         if (!$errors) {
             $duplicate_id = $tags_model->getTagId($tag['tag']);
             if (!$duplicate_id) {
                 $tags_model->updateTag($tag_id, $tag);
             }
             if ($duplicate_id) {
                 $tags_model->mergeTags($tag_id, $duplicate_id);
                 cmsUser::addSessionMessage(sprintf(LANG_TAGS_MERGED, $original_tag, $tag['tag']), 'success');
             }
             $this->redirectToAction();
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('backend/tag', array('do' => 'edit', 'tag' => $tag, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #4
0
ファイル: widgets_page_edit.php プロジェクト: asphix/icms2
 public function run($id = false)
 {
     if (!$id) {
         cmsCore::error404();
     }
     $widgets_model = cmsCore::getModel('widgets');
     cmsCore::loadAllControllersLanguages();
     $page = $widgets_model->getPage($id);
     if (!$page) {
         cmsCore::error404();
     }
     $form = $this->getForm('widgets_page');
     if (!$page['is_custom']) {
         $form->removeField('title', 'title');
     }
     $is_submitted = $this->request->has('submit');
     if ($is_submitted) {
         $page = $form->parse($this->request, $is_submitted);
         $errors = $form->validate($this, $page);
         if (!$errors) {
             $widgets_model->updatePage($id, $page);
             $this->redirectToAction('widgets');
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('widgets_page', array('do' => 'edit', 'page' => $page, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #5
0
ファイル: camera.php プロジェクト: Val-Git/icms2
 public function run()
 {
     $camera = urldecode($this->request->get('name', ''));
     if (!$camera) {
         cmsCore::error404();
     }
     if (cmsUser::isAllowed('albums', 'view_all')) {
         $this->model->disablePrivacyFilter();
     }
     $this->model->filterEqual('camera', $camera);
     $page = $this->request->get('photo_page', 1);
     $perpage = empty($this->options['limit']) ? 16 : $this->options['limit'];
     $this->model->limitPagePlus($page, $perpage);
     $this->model->orderBy($this->options['ordering'], 'desc');
     $photos = $this->getPhotosList();
     if (!$photos) {
         cmsCore::error404();
     }
     if ($photos && count($photos) > $perpage) {
         $has_next = true;
         array_pop($photos);
     } else {
         $has_next = false;
     }
     $ctype = cmsCore::getModel('content')->getContentTypeByName('albums');
     $this->cms_template->render('camera', array('page_title' => sprintf(LANG_PHOTOS_CAMERA_TITLE, $camera), 'ctype' => $ctype, 'page' => $page, 'row_height' => $this->getRowHeight(), 'user' => $this->cms_user, 'item' => array('id' => 0, 'user_id' => 0, 'url_params' => array('camera' => $camera), 'base_url' => href_to('photos', 'camera-' . urlencode($camera))), 'item_type' => 'camera', 'photos' => $photos, 'is_owner' => cmsUser::isAllowed('albums', 'delete', 'all'), 'has_next' => $has_next, 'hooks_html' => cmsEventsManager::hookAll('photo_camera_html', $camera), 'preset_small' => $this->options['preset_small']));
 }
コード例 #6
0
ファイル: file.php プロジェクト: asphix/icms2
 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']);
 }
コード例 #7
0
ファイル: content_before_list.php プロジェクト: Val-Git/icms2
 public function run($data)
 {
     if (empty($this->options['is_hash_tag'])) {
         return $data;
     }
     list($ctype, $items) = $data;
     if (empty($items)) {
         return $data;
     }
     $fields = cmsCore::getModel('content')->filterIn('type', array('text', 'html'))->getContentFields($ctype['name']);
     if (!$fields) {
         return $data;
     }
     foreach ($items as $item) {
         foreach ($fields as $field) {
             if (!$field['is_in_list'] || empty($field['options']['in_fulltext_search'])) {
                 continue;
             }
             if (!empty($item[$field['name']])) {
                 $items[$item['id']][$field['name']] = $this->parseHashTag($item[$field['name']]);
             }
         }
     }
     return array($ctype, $items);
 }
コード例 #8
0
ファイル: form_options.php プロジェクト: Val-Git/icms2
 public function init()
 {
     return array(array('type' => 'fieldset', 'title' => LANG_ACTIVITY_OPT_TYPES, 'childs' => array(new fieldList('types', array('is_multiple' => true, 'generator' => function () {
         $types = cmsCore::getModel('activity')->getTypes();
         return array_collection_to_list($types, 'id', 'title');
     })))), array('type' => 'fieldset', 'title' => LANG_LIST_LIMIT, 'childs' => array(new fieldNumber('limit', array('default' => 15, 'rules' => array(array('required')))))));
 }
コード例 #9
0
 public function run()
 {
     $taxonomy_model = cmsCore::getModel('taxonomy');
     $vocabularies = $taxonomy_model->getVocabularies();
     $grid = $this->loadDataGrid('terms');
     return cmsTemplate::getInstance()->render('backend/vocabularies', array('vocabularies' => $vocabularies, 'grid' => $grid));
 }
コード例 #10
0
ファイル: content_items_ajax.php プロジェクト: rookees/icms2
 public function run($ctype_id, $parent_id)
 {
     if (!$this->request->isAjax()) {
         cmsCore::error404();
     }
     $content_model = cmsCore::getModel('content');
     $ctype = $content_model->getContentType($ctype_id);
     $category = $content_model->getCategory($ctype['name'], $parent_id);
     $grid = $this->loadDataGrid('content_items', $ctype['name']);
     $content_model->setPerPage(admin::perpage);
     $filter = array();
     $filter_str = $this->request->get('filter');
     if ($filter_str) {
         parse_str($filter_str, $filter);
         $content_model->applyGridFilter($grid, $filter);
         if (!empty($filter['advanced_filter'])) {
             parse_str($filter['advanced_filter'], $dataset_filters);
             if (!empty($dataset_filters['dataset'])) {
                 $dataset_id = $dataset_filters['dataset'];
                 $dataset = $content_model->getContentDataset($dataset_id);
                 $content_model->applyDatasetFilters($dataset, true);
             }
             $content_model->applyDatasetFilters($dataset_filters);
         }
     }
     $content_model->filterCategory($ctype['name'], $category, $ctype['is_cats_recursive']);
     $content_model->disableApprovedFilter();
     $content_model->disablePubFilter();
     $total = $content_model->getContentItemsCount($ctype['name']);
     $perpage = isset($filter['perpage']) ? $filter['perpage'] : admin::perpage;
     $pages = ceil($total / $perpage);
     $items = $content_model->getContentItems($ctype['name']);
     cmsTemplate::getInstance()->renderGridRowsJSON($grid, $items, $total, $pages);
     $this->halt();
 }
コード例 #11
0
ファイル: options.form.php プロジェクト: Val-Git/icms2
 public function init($options, $template_name)
 {
     return array(array('type' => 'fieldset', 'title' => LANG_OPTIONS, 'childs' => array(new fieldList('options:menu', array('title' => LANG_MENU, 'generator' => function ($item) {
         $menu_model = cmsCore::getModel('menu');
         $tree = $menu_model->getMenus();
         $items = array();
         if ($tree) {
             foreach ($tree as $item) {
                 $items[$item['name']] = $item['title'];
             }
         }
         return $items;
     })), new fieldList('options:template', array('title' => LANG_WD_MENU_TEMPLATE, 'hint' => LANG_WD_MENU_TEMPLATE_HINT, 'generator' => function ($item) use($template_name) {
         $default_tpls = cmsCore::getFilesList('templates/default/assets/ui/', 'menu*.tpl.php');
         $current_tpls = cmsCore::getFilesList('templates/' . $template_name . '/assets/ui/', 'menu*.tpl.php');
         $tpls = array_unique(array_merge($current_tpls, $default_tpls));
         $items = array();
         if ($tpls) {
             foreach ($tpls as $tpl) {
                 $items[str_replace('.tpl.php', '', $tpl)] = str_replace('.tpl.php', '', $tpl);
             }
         }
         return $items;
     })), new fieldCheckbox('options:is_detect', array('title' => LANG_WD_MENU_DETECT_ACTIVE, 'default' => 1)), new fieldNumber('options:max_items', array('title' => LANG_WD_MENU_MAX_ITEMS, 'hint' => LANG_WD_MENU_MAX_ITEMS_HINT, 'default' => 0)))));
 }
コード例 #12
0
ファイル: controllers_delete.php プロジェクト: pin-git/icms2
 public function run($controller_name)
 {
     if (!$controller_name) {
         cmsCore::error404();
     }
     $controller_info = $this->model->getControllerInfo($controller_name);
     if (!$controller_info || !$controller_info['is_external']) {
         cmsCore::error404();
     }
     if ($controller_info['is_backend']) {
         $backend_context = $this->request->isAjax() ? cmsRequest::CTX_AJAX : cmsRequest::CTX_INTERNAL;
         $backend_request = new cmsRequest($this->request->getData(), $backend_context);
         $backend_controller = $this->loadControllerBackend($controller_info['name'], $backend_request);
         // смотрим специальный экшен
         if ($backend_controller->isActionExists('delete_component')) {
             $backend_controller->redirectToAction('delete_component');
         }
     }
     // нет бэкэенда или экшена, удаляем через метод модели контроллера
     // если в модели контроллера нет метода deleteController
     // будет использоваться из основной модели
     // который просто удалит запись в cms_controllers
     if (cmsCore::isModelExists($controller_info['name'])) {
         cmsCore::getModel($controller_info['name'])->deleteController($controller_info['id']);
     } else {
         $model = new cmsModel();
         $model->deleteController($controller_info['id']);
     }
     cmsUser::addSessionMessage(sprintf(LANG_CP_COMPONENT_IS_DELETED, $controller_info['title']), 'success');
     $this->redirectToAction('controllers');
 }
コード例 #13
0
ファイル: add.php プロジェクト: regvo/instant
 public function run()
 {
     if (!$this->request->isAjax()) {
         cmsCore::error404();
     }
     if (preg_match('/^\\/[0-9a-zA-Zа-яёА-ЯЁ\\-\\_\\.\\/\\*?&=]+$/u', $this->request->get('link_from'))) {
         if (preg_match('/[\\/\\*]+$/u', $this->request->get('link_from'))) {
             $type = '2';
         } elseif (preg_match('/^\\/[0-9a-zA-Zа-яёА-ЯЁ\\-\\_\\.\\/?&=]+$/u', $this->request->get('link_from'))) {
             $type = '1';
         } else {
             $res['error']['incorrect_link_from'] = 1;
         }
     } else {
         $res['error']['incorrect_link_from'] = 1;
     }
     if (!preg_match('/^\\/[0-9a-zA-Zа-яёА-ЯЁ\\-\\_\\.\\/?&=]+$/u', $this->request->get('link_to')) and $this->request->get('header') != '410') {
         $res['error']['incorrect_link_to'] = 1;
     }
     $link_to = $this->request->get('link_to');
     if ($this->request->get('header') === '410') {
         $link_to = '--//--';
     }
     if (!isset($res['error'])) {
         $model = cmsCore::getModel('shredirect');
         $data = array('link_from' => $this->request->get('link_from'), 'type' => $type, 'link_to' => $link_to, 'header' => $this->request->get('header'));
         if ($model->addShredirect($data)) {
             $res['reply'] = LANG_SHREDIRECT_SUCCESS_ADD;
         } else {
             $res['error']['bd'] = LANG_SHREDIRECT_ERROR_BD;
         }
     }
     echo json_encode($res);
     die;
 }
コード例 #14
0
ファイル: restore.php プロジェクト: asphix/icms2
 public function run()
 {
     if (cmsUser::isLogged()) {
         $this->redirectToHome();
     }
     $users_model = cmsCore::getModel('users');
     $form = $this->getForm('restore');
     $data = array();
     $is_submitted = $this->request->has('submit');
     if ($is_submitted) {
         $data = $form->parse($this->request, $is_submitted);
         $errors = $form->validate($this, $data);
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
         if (!$errors) {
             $user = $users_model->getUserByEmail($data['email']);
             if (!$user) {
                 cmsUser::addSessionMessage(LANG_EMAIL_NOT_FOUND, 'error');
             } else {
                 $pass_token = string_random(32, $user['email']);
                 $users_model->updateUserPassToken($user['id'], $pass_token);
                 $messenger = cmsCore::getController('messages');
                 $to = array('email' => $user['email'], 'name' => $user['nickname']);
                 $letter = array('name' => 'reg_restore');
                 $messenger->sendEmail($to, $letter, array('nickname' => $user['nickname'], 'page_url' => href_to_abs('auth', 'reset', $pass_token), 'valid_until' => html_date(date('d.m.Y H:i', time() + 24 * 3600), true)));
                 cmsUser::addSessionMessage(LANG_TOKEN_SENDED, 'success');
             }
         }
     }
     return cmsTemplate::getInstance()->render('restore', array('data' => $data, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #15
0
ファイル: presets_edit.php プロジェクト: asphix/icms2
 public function run($id)
 {
     if (!$id) {
         cmsCore::error404();
     }
     $images_model = cmsCore::getModel('images');
     $form = $this->getForm('preset', array('edit'));
     $is_submitted = $this->request->has('submit');
     $preset = $images_model->getPreset($id);
     if ($preset['is_internal']) {
         $form->removeFieldset('basic');
     }
     if ($is_submitted) {
         $preset = $form->parse($this->request, $is_submitted);
         $errors = $form->validate($this, $preset);
         if (!$errors) {
             $images_model->updatePreset($id, $preset);
             $this->redirectToAction('presets');
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('backend/preset', array('do' => 'edit', 'preset' => $preset, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #16
0
ファイル: users_add.php プロジェクト: asphix/icms2
 public function run($group_id = false)
 {
     $users_model = cmsCore::getModel('users');
     $form = $this->getForm('user', array('add'));
     $is_submitted = $this->request->has('submit');
     $user = $form->parse($this->request, $is_submitted);
     if (!$is_submitted) {
         $user['groups'] = array($group_id);
     }
     if ($is_submitted) {
         $errors = $form->validate($this, $user);
         if (mb_strlen($user['password1']) < 6) {
             $errors['password1'] = sprintf(ERR_VALIDATE_MIN_LENGTH, 6);
         }
         if (!$errors) {
             $result = $users_model->addUser($user);
             if ($result['success']) {
                 cmsUser::addSessionMessage(sprintf(LANG_CP_USER_CREATED, $user['nickname']), 'success');
                 $this->redirectToAction('users');
             } else {
                 $errors = $result['errors'];
             }
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('user', array('do' => 'add', 'user' => $user, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #17
0
ファイル: ctypes_perms_save.php プロジェクト: asphix/icms2
 public function run($ctype_name)
 {
     $values = $this->request->get('value');
     if (!$values || !$ctype_name) {
         cmsCore::error404();
     }
     $content_model = cmsCore::getModel('content');
     $ctype = $content_model->getContentTypeByName($ctype_name);
     if (!$ctype) {
         cmsCore::error404();
     }
     $rules = cmsPermissions::getRulesList('content');
     list($ctype, $rules, $values) = cmsEventsManager::hook('content_perms', array($ctype, $rules, $values));
     list($ctype, $rules, $values) = cmsEventsManager::hook("content_{$ctype['name']}_perms", array($ctype, $rules, $values));
     $users_model = cmsCore::getModel('users');
     $groups = $users_model->getGroups(false);
     // перебираем правила
     foreach ($rules as $rule) {
         // если для этого правила вообще ничего нет,
         // то присваиваем null
         if (empty($values[$rule['id']])) {
             $values[$rule['id']] = null;
             continue;
         }
         // перебираем группы, заменяем на нуллы
         // значения отсутствующих правил
         foreach ($groups as $group) {
             if (empty($values[$rule['id']][$group['id']])) {
                 $values[$rule['id']][$group['id']] = null;
             }
         }
     }
     cmsPermissions::savePermissions($ctype_name, $values);
     $this->redirectBack();
 }
コード例 #18
0
ファイル: widget.php プロジェクト: dgolovanev/icms2
 public function run()
 {
     $cat_id = $this->getOption('category_id');
     $ctype_id = $this->getOption('ctype_id');
     $dataset_id = $this->getOption('dataset');
     $image_field = $this->getOption('image_field');
     $big_image_field = $this->getOption('big_image_field');
     $big_image_preset = $this->getOption('big_image_preset');
     $teaser_fields = $this->getOption('teaser_field');
     $limit = $this->getOption('limit', 10);
     $delay = $this->getOption('delay', 5);
     $teaser_len = $this->getOption('teaser_len', 100);
     $model = cmsCore::getModel('content');
     $ctype = $model->getContentType($ctype_id);
     if (!$ctype) {
         return false;
     }
     if ($cat_id) {
         $category = $model->getCategory($ctype['name'], $cat_id);
     } else {
         $category = false;
     }
     if ($dataset_id) {
         $dataset = $model->getContentDataset($dataset_id);
         if ($dataset) {
             $model->applyDatasetFilters($dataset);
         } else {
             $dataset_id = false;
         }
     }
     if ($category) {
         $model->filterCategory($ctype['name'], $category, true);
     }
     // Приватность
     // флаг показа только названий
     $hide_except_title = !empty($ctype['options']['privacy_type']) && $ctype['options']['privacy_type'] == 'show_title';
     // Сначала проверяем настройки типа контента
     if (!empty($ctype['options']['privacy_type']) && in_array($ctype['options']['privacy_type'], array('show_title', 'show_all'), true)) {
         $model->disablePrivacyFilter();
         if ($ctype['options']['privacy_type'] != 'show_title') {
             $hide_except_title = false;
         }
     }
     // А потом, если разрешено правами доступа, отключаем фильтр приватности
     if (cmsUser::isAllowed($ctype['name'], 'view_all')) {
         $model->disablePrivacyFilter();
         $hide_except_title = false;
     }
     // Скрываем записи из скрытых родителей (приватных групп и т.п.)
     $model->filterHiddenParents();
     list($ctype, $model) = cmsEventsManager::hook('content_list_filter', array($ctype, $model));
     list($ctype, $model) = cmsEventsManager::hook("content_{$ctype['name']}_list_filter", array($ctype, $model));
     $items = $model->limit($limit)->getContentItems($ctype['name']);
     if (!$items) {
         return false;
     }
     list($ctype, $items) = cmsEventsManager::hook("content_before_list", array($ctype, $items));
     list($ctype, $items) = cmsEventsManager::hook("content_{$ctype['name']}_before_list", array($ctype, $items));
     return array('ctype' => $ctype, 'teaser_len' => $teaser_len, 'hide_except_title' => $hide_except_title, 'delay' => $delay, 'image_field' => $image_field, 'big_image_field' => $big_image_field, 'big_image_preset' => $big_image_preset, 'teaser_field' => $teaser_fields, 'items' => $items);
 }
コード例 #19
0
ファイル: delete.php プロジェクト: asphix/icms2
 public function run($photo_id = null)
 {
     if (!$this->request->isAjax()) {
         cmsCore::error404();
     }
     if (!$photo_id) {
         $photo_id = $this->request->get('id');
         if (!$photo_id) {
             cmsCore::error404();
         }
     }
     $photo = $this->model->getPhoto($photo_id);
     $success = true;
     // проверяем наличие доступа
     $user = cmsUser::getInstance();
     if (!cmsUser::isAllowed('albums', 'edit')) {
         $success = false;
     }
     if (!cmsUser::isAllowed('albums', 'edit', 'all') && $photo['user_id'] != $user->id) {
         $success = false;
     }
     if (!$success) {
         cmsTemplate::getInstance()->renderJSON(array('success' => false));
     }
     $album = cmsCore::getModel('content')->getContentItem('albums', $photo['album_id']);
     $this->model->deletePhoto($photo_id);
     $this->model->setRandomAlbumCoverImage($photo['album_id']);
     cmsTemplate::getInstance()->renderJSON(array('success' => true, 'album_url' => href_to('albums', $album['slug'] . '.html')));
 }
コード例 #20
0
 public function run($ctype_id, $dataset_id)
 {
     if (!$ctype_id || !$dataset_id) {
         cmsCore::error404();
     }
     $content_model = cmsCore::getModel('content');
     $ctype = $content_model->getContentType($ctype_id);
     if (!$ctype) {
         cmsCore::error404();
     }
     $form = $this->getForm('ctypes_dataset', array('edit', $ctype['id']));
     $dataset = $old_dataset = $content_model->getContentDataset($dataset_id);
     $fields = $content_model->getContentFields($ctype['name']);
     if ($this->request->has('submit')) {
         $dataset = $form->parse($this->request, true);
         $dataset['filters'] = $this->request->get('filters');
         $dataset['sorting'] = $this->request->get('sorting');
         $errors = $form->validate($this, $dataset);
         if (!$errors) {
             $content_model->updateContentDataset($dataset_id, $dataset, $ctype, $old_dataset);
             $this->redirectToAction('ctypes', array('datasets', $ctype['id']));
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return $this->cms_template->render('ctypes_dataset', array('do' => 'edit', 'ctype' => $ctype, 'dataset' => $dataset, 'fields' => $fields, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #21
0
ファイル: upload.php プロジェクト: asphix/icms2
 public function processUpload($album_id)
 {
     $config = cmsConfig::getInstance();
     $uploader = new cmsUploader();
     $result = $uploader->upload('qqfile');
     if (!$result['success']) {
         cmsTemplate::getInstance()->renderJSON($result);
         $this->halt();
     }
     $preset = array('width' => 600, 'height' => 460, 'is_square' => false, 'is_watermark' => false);
     if (!empty($this->options['preset'])) {
         $preset = cmsCore::getModel('images')->getPresetByName($this->options['preset']);
     }
     $result['paths'] = array('big' => $uploader->resizeImage($result['path'], array('width' => $preset['width'], 'height' => $preset['height'], 'square' => $preset['is_square'])), 'normal' => $uploader->resizeImage($result['path'], array('width' => 160, 'height' => 160, 'square' => true)), 'small' => $uploader->resizeImage($result['path'], array('width' => 64, 'height' => 64, 'square' => true)), 'original' => $result['url']);
     if ($preset['is_watermark'] && !empty($preset['wm_image'])) {
         $images_controller = cmsCore::getController('images');
         $images_controller->addWatermark($result['paths']['big'], $preset['wm_image']['original'], $preset['wm_origin'], $preset['wm_margin']);
     }
     $result['filename'] = basename($result['path']);
     if (empty($this->options['is_origs'])) {
         @unlink($result['path']);
         unset($result['paths']['original']);
     }
     unset($result['path']);
     $result['url'] = $config->upload_host . '/' . $result['paths']['small'];
     $result['id'] = $this->model->addPhoto($album_id, $result['paths']);
     cmsTemplate::getInstance()->renderJSON($result);
     $this->halt();
 }
コード例 #22
0
ファイル: verify.php プロジェクト: Val-Git/icms2
 public function run($pass_token)
 {
     if (!$pass_token) {
         cmsCore::error404();
     }
     if (cmsUser::isLogged()) {
         $this->redirectToHome();
     }
     $users_model = cmsCore::getModel('users');
     $user = $users_model->getUserByPassToken($pass_token);
     if (!$user) {
         cmsCore::error404();
     }
     $users_model->unlockUser($user['id']);
     $users_model->clearUserPassToken($user['id']);
     cmsEventsManager::hook('user_registered', $user);
     cmsUser::addSessionMessage($this->options['reg_auto_auth'] ? LANG_REG_SUCCESS_VERIFIED_AND_AUTH : LANG_REG_SUCCESS_VERIFIED, 'success');
     // авторизуем пользователя автоматически
     if ($this->options['reg_auto_auth']) {
         $user = cmsEventsManager::hook('user_login', $user);
         cmsUser::sessionSet('user', array('id' => $user['id'], 'groups' => $user['groups'], 'time_zone' => $user['time_zone'], 'perms' => cmsUser::getPermissions($user['groups']), 'is_admin' => $user['is_admin']));
         $update_data = array('ip' => cmsUser::getIp());
         $this->model->update('{users}', $user['id'], $update_data, true);
         cmsEventsManager::hook('auth_login', $user['id']);
     }
     $this->redirect($this->getAuthRedirectUrl($this->options['first_auth_redirect']));
 }
コード例 #23
0
ファイル: users_group_perms.php プロジェクト: asphix/icms2
 public function run($id)
 {
     if (!$id) {
         cmsCore::error404();
     }
     $users_model = cmsCore::getModel('users');
     $group = $users_model->getGroup($id);
     if (!$group) {
         cmsCore::error404();
     }
     $controllers = cmsPermissions::getControllersWithRules();
     $owners = array();
     foreach ($controllers as $controller_name) {
         $controller = cmsCore::getController($controller_name);
         $subjects = $controller->getPermissionsSubjects();
         $rules = cmsPermissions::getRulesList($controller_name);
         $values = array();
         foreach ($subjects as $subject) {
             $values[$subject['name']] = cmsPermissions::getPermissions($subject['name']);
         }
         $owners[$controller_name] = array('subjects' => $subjects, 'rules' => $rules, 'values' => $values);
     }
     $template = cmsTemplate::getInstance();
     $template->setMenuItems('users_group', array(array('title' => LANG_CONFIG, 'url' => href_to($this->name, 'users', array('group_edit', $id))), array('title' => LANG_PERMISSIONS, 'url' => href_to($this->name, 'users', array('group_perms', $id)))));
     return $template->render('users_group_perms', array('group' => $group, 'owners' => $owners));
 }
コード例 #24
0
ファイル: backend.php プロジェクト: asphix/icms2
 public function actionPermsSave($subject = '')
 {
     if (empty($this->useDefaultPermissionsAction)) {
         cmsCore::error404();
     }
     $values = $this->request->get('value');
     if (!$values) {
         cmsCore::error404();
     }
     $rules = cmsPermissions::getRulesList($this->name);
     $users_model = cmsCore::getModel('users');
     $groups = $users_model->getGroups(false);
     // перебираем правила
     foreach ($rules as $rule) {
         // если для этого правила вообще ничего нет,
         // то присваиваем null
         if (!isset($values[$rule['id']])) {
             $values[$rule['id']] = null;
             continue;
         }
         // перебираем группы, заменяем на нуллы
         // значения отсутствующих правил
         foreach ($groups as $group) {
             if (!isset($values[$rule['id']][$group['id']])) {
                 $values[$rule['id']][$group['id']] = null;
             }
         }
     }
     cmsPermissions::savePermissions($subject, $values);
     $this->redirectBack();
 }
コード例 #25
0
ファイル: profile_invites.php プロジェクト: Val-Git/icms2
 private function sendInvites($profile, $emails_list)
 {
     $results = array('success' => array(), 'failed' => array());
     $emails = string_explode_list($emails_list);
     $auth_controller = cmsCore::getController('auth');
     $auth_model = cmsCore::getModel('auth');
     $messenger = cmsCore::getController('messages');
     foreach ($emails as $email) {
         if ($this->validate_email($email) !== true) {
             $results['failed'][$email] = ERR_VALIDATE_EMAIL;
             continue;
         }
         if ($this->model->getUserByEmail($email)) {
             $results['failed'][$email] = LANG_REG_EMAIL_EXISTS;
             continue;
         }
         if (!$auth_controller->isEmailAllowed($email)) {
             $results['failed'][$email] = LANG_AUTH_RESTRICTED_EMAILS;
             continue;
         }
         $invite = $auth_model->getNextInvite($this->cms_user->id);
         $to = array('email' => $email, 'name' => $email);
         $letter = array('name' => 'users_invite');
         $messenger->sendEmail($to, $letter, array('nickname' => $this->cms_user->nickname, 'code' => $invite['code'], 'page_url' => href_to_abs('auth', 'register') . "?inv={$invite['code']}"));
         $results['success'][$email] = true;
         $auth_model->markInviteSended($invite['id'], $this->cms_user->id, $email);
         if (sizeof($results['success']) + sizeof($results['failed']) >= $profile['invites_count']) {
             break;
         }
     }
     return $results;
 }
コード例 #26
0
ファイル: edit.php プロジェクト: asphix/icms2
 public function run($feed_id)
 {
     if (!$feed_id) {
         cmsCore::error404();
     }
     $rss_model = cmsCore::getModel('rss');
     $feed = $rss_model->getFeed($feed_id);
     $ctype_id = $feed['ctype_id'];
     $content_model = cmsCore::getModel('content');
     $fields = $content_model->getContentFields($feed['ctype_name']);
     $fields = array('' => '') + array_collection_to_list($fields, 'name', 'title');
     $form = $this->getForm('feed', array($fields));
     $is_submitted = $this->request->has('submit');
     if ($is_submitted) {
         $feed = $form->parse($this->request, $is_submitted);
         $errors = $form->validate($this, $feed);
         if (!$errors) {
             $rss_model->updateFeed($feed_id, $feed);
             $ctype = $content_model->getContentType($ctype_id);
             $ctype['options']['is_rss'] = $feed['is_enabled'];
             $content_model->updateContentType($ctype_id, array('options' => $ctype['options']));
             $this->redirectToAction();
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('backend/edit', array('feed' => $feed, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #27
0
ファイル: cron_send_invites.php プロジェクト: Val-Git/icms2
 public function run()
 {
     if (!$this->options['is_reg_invites']) {
         return false;
     }
     if (!$this->options['is_invites']) {
         return false;
     }
     $period = $this->options['invites_period'];
     $qty = $this->options['invites_qty'];
     $min_karma = $this->options['invites_min_karma'];
     $min_rating = $this->options['invites_min_rating'];
     $min_days = $this->options['invites_min_days'];
     $users_model = cmsCore::getModel('users');
     $users_model->filterIsNull('is_locked');
     $users_model->filterStart()->filterDateOlder('date_invites', $period)->filterOr()->filterIsNull('date_invites')->filterEnd();
     $users_model->filterGtEqual('karma', $min_karma);
     $users_model->filterGtEqual('rating', $min_rating);
     $users_model->filterDateOlder('date_reg', $min_days);
     $users = $users_model->getUsers();
     if (!$users) {
         return false;
     }
     foreach ($users as $user) {
         $this->model->addInvites($user['id'], $qty);
     }
 }
コード例 #28
0
ファイル: reset.php プロジェクト: asphix/icms2
 public function run($pass_token)
 {
     if (!$pass_token) {
         cmsCore::error404();
     }
     $users_model = cmsCore::getModel('users');
     $profile = $users_model->getUserByPassToken($pass_token);
     if (!$profile) {
         cmsCore::error404();
     }
     $form = $this->getForm('reset');
     $is_submitted = $this->request->has('submit');
     if ($is_submitted) {
         $profile = array_merge($profile, $form->parse($this->request, $is_submitted));
         $errors = $form->validate($this, $profile);
         if (!$errors) {
             $result = $users_model->updateUser($profile['id'], $profile);
             if ($result['success']) {
                 cmsUser::addSessionMessage(LANG_PASS_CHANGED, 'success');
                 $users_model->clearUserPassToken($profile['id']);
                 $this->redirectTo('users', $profile['id']);
             } else {
                 $errors = $result['errors'];
             }
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('reset', array('profile' => $profile, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
コード例 #29
0
ファイル: users_ajax.php プロジェクト: roman-burachenko/icms2
 public function run($group_id = false)
 {
     if (!$this->request->isAjax()) {
         cmsCore::error404();
     }
     $grid = $this->loadDataGrid('users');
     $users_model = cmsCore::getModel('users');
     $users_model->setPerPage(admin::perpage);
     $filter = array();
     $filter_str = $this->request->get('filter');
     $filter_str = cmsUser::getUPSActual('admin.grid_filter.users', $filter_str);
     if ($filter_str) {
         $content_model = cmsCore::getModel('content')->setTablePrefix('');
         parse_str($filter_str, $filter);
         $users_model->applyGridFilter($grid, $filter);
         if (!empty($filter['advanced_filter'])) {
             parse_str($filter['advanced_filter'], $dataset_filters);
             $users_model->applyDatasetFilters($dataset_filters);
         }
     }
     if ($group_id) {
         $users_model->filterGroup($group_id);
     }
     $total = $users_model->getUsersCount();
     $perpage = isset($filter['perpage']) ? $filter['perpage'] : admin::perpage;
     $pages = ceil($total / $perpage);
     $users = $users_model->getUsers();
     cmsTemplate::getInstance()->renderGridRowsJSON($grid, $users, $total, $pages);
     $this->halt();
 }
コード例 #30
0
 public function run($template_name = null)
 {
     if ($template_name) {
         cmsCore::getModel('widgets')->unbindAllWidgets($template_name);
     }
     $this->redirectBack();
 }