Exemplo n.º 1
0
 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']));
 }
Exemplo n.º 2
0
 public function run()
 {
     $form = $this->getForm('options');
     if (!$form) {
         cmsCore::error404();
     }
     $is_submitted = $this->request->has('submit');
     $options = cmsController::loadOptions($this->name);
     $source_controllers = cmsEventsManager::hookAll('sitemap_sources');
     if (is_array($source_controllers)) {
         foreach ($source_controllers as $controller) {
             foreach ($controller['sources'] as $id => $title) {
                 $form->addField('sources', new fieldCheckbox("sources:{$controller['name']}|{$id}", array('title' => $title)));
             }
         }
     }
     if ($is_submitted) {
         $options = $form->parse($this->request, $is_submitted);
         $errors = $form->validate($this, $options);
         if (!$errors) {
             cmsUser::addSessionMessage(LANG_CP_SAVE_SUCCESS, 'success');
             cmsController::saveOptions($this->name, $options);
             $this->redirectToAction('options');
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('backend/options', array('options' => $options, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
Exemplo n.º 3
0
 public function getWidget()
 {
     $comment_systems = cmsEventsManager::hookAll('comment_systems', $this, array());
     if (empty($this->options['disable_icms_comments']) || !$comment_systems) {
         array_unshift($comment_systems, $this->getNativeComments());
     }
     return $this->cms_template->renderInternal($this, 'tab_list', array('comment_systems' => $comment_systems));
 }
Exemplo n.º 4
0
 public function run()
 {
     //
     // формируем виджеты главной админки
     //
     // Виджет статистики
     $chart_nav = cmsEventsManager::hookAll('admin_dashboard_chart');
     $cookie = cmsUser::getCookie('dashboard_chart');
     $defaults = array('controller' => 'users', 'section' => 'reg', 'period' => 7);
     if ($cookie) {
         $cookie = json_decode($cookie, true);
         if (is_array($cookie)) {
             $defaults = array('controller' => $cookie['c'], 'section' => $cookie['s'], 'period' => $cookie['p']);
         }
     }
     $dashboard_blocks[] = array('title' => LANG_CP_DASHBOARD_STATS, 'class' => 'col3', 'html' => $this->cms_template->getRenderedChild('index_chart', array('chart_nav' => $chart_nav, 'defaults' => $defaults)));
     $uploader = new cmsUploader();
     $extensions = get_loaded_extensions();
     $sysinfo = array(LANG_CP_DASHBOARD_SI_PHP => phpversion(), LANG_CP_DASHBOARD_SI_ML => files_format_bytes(files_convert_bytes(@ini_get('memory_limit'))), LANG_CP_DASHBOARD_SI_MAX => $uploader->getMaxUploadSize(), LANG_CP_DASHBOARD_SI_IP => filter_input(INPUT_SERVER, 'SERVER_ADDR'), LANG_CP_DASHBOARD_SI_ROOT => ROOT, LANG_CP_DASHBOARD_SI_SESSION => session_save_path(), LANG_CP_DASHBOARD_SI_ION => in_array('ionCube Loader', $extensions), LANG_CP_DASHBOARD_SI_ZEND => in_array('Zend Optimizer', $extensions), LANG_CP_DASHBOARD_SI_ZENDG => in_array('Zend Guard Loader', $extensions));
     $dashboard_blocks[] = array('title' => LANG_CP_DASHBOARD_SYSINFO, 'html' => $this->cms_template->getRenderedChild('index_sysinfo', array('sysinfo' => $sysinfo)));
     $dashboard_blocks[] = array('title' => LANG_CP_DASHBOARD_RESOURCES, 'html' => $this->cms_template->getRenderedChild('index_resources', array()));
     $dashboard_blocks = array_merge($dashboard_blocks, cmsEventsManager::hookAll('admin_dashboard_block', false, array()));
     $_block_id = 0;
     foreach ($dashboard_blocks as $dashboard_block) {
         // в одном хуке можно создавать несколько виджетов админки
         // для этого хук должен вернуть массив виджетов
         if (!isset($dashboard_block['title'])) {
             foreach ($dashboard_block as $sub_dashboard_block) {
                 $sub_dashboard_block['id'] = $_block_id;
                 $result_dashboard_blocks[$_block_id] = $sub_dashboard_block;
                 $_block_id++;
             }
         } else {
             $dashboard_block['id'] = $_block_id;
             $result_dashboard_blocks[$_block_id] = $dashboard_block;
         }
         $_block_id++;
     }
     // формируем с учетом порядка
     if (!empty($this->options['dashboard_order'])) {
         $order_id = 1000;
         foreach ($result_dashboard_blocks as $block_id => $block) {
             if (isset($this->options['dashboard_order'][$block_id])) {
                 $order_id = $this->options['dashboard_order'][$block_id];
             } else {
                 $order_id += 1;
             }
             $_result_dashboard_blocks[$order_id] = $block;
         }
         ksort($_result_dashboard_blocks);
     } else {
         $_result_dashboard_blocks = $result_dashboard_blocks;
     }
     return $this->cms_template->render('index', array('dashboard_blocks' => $_result_dashboard_blocks));
 }
Exemplo n.º 5
0
 public function init()
 {
     return array(array('type' => 'fieldset', 'title' => LANG_SEARCH_IN_CTYPES, 'childs' => array(new fieldList('types', array('is_multiple' => true, 'generator' => function () {
         $search_controllers = cmsEventsManager::hookAll('fulltext_search');
         $items = array();
         foreach ($search_controllers as $controller) {
             $items = array_merge($items, $controller['sources']);
         }
         return $items;
     })), new fieldCheckbox('is_hash_tag', array('title' => LANG_SEARCH_IS_HASH_TAG)))), array('type' => 'fieldset', 'title' => LANG_SEARCH_PERPAGE, 'childs' => array(new fieldNumber('perpage', array('default' => 15, 'rules' => array(array('required')))))));
 }
Exemplo n.º 6
0
 public function run()
 {
     $chart_nav = cmsEventsManager::hookAll('admin_dashboard_chart');
     $uploader = new cmsUploader();
     $extensions = get_loaded_extensions();
     $sysinfo = array(LANG_CP_DASHBOARD_SI_PHP => phpversion(), LANG_CP_DASHBOARD_SI_ML => files_format_bytes(files_convert_bytes(@ini_get('memory_limit'))), LANG_CP_DASHBOARD_SI_MAX => $uploader->getMaxUploadSize(), LANG_CP_DASHBOARD_SI_IP => filter_input(INPUT_SERVER, 'SERVER_ADDR'), LANG_CP_DASHBOARD_SI_ROOT => ROOT, LANG_CP_DASHBOARD_SI_ION => in_array('ionCube Loader', $extensions), LANG_CP_DASHBOARD_SI_ZEND => in_array('Zend Optimizer', $extensions), LANG_CP_DASHBOARD_SI_ZENDG => in_array('Zend Guard Loader', $extensions));
     $cookie = cmsUser::getCookie('dashboard_chart');
     $defaults = array('controller' => 'users', 'section' => 'reg', 'period' => 7);
     if ($cookie) {
         $cookie = json_decode($cookie, true);
         if (is_array($cookie)) {
             $defaults = array('controller' => $cookie['c'], 'section' => $cookie['s'], 'period' => $cookie['p']);
         }
     }
     return cmsTemplate::getInstance()->render('index', array('dashboard_blocks' => cmsEventsManager::hookAll('admin_dashboard_block'), 'chart_nav' => $chart_nav, 'sysinfo' => $sysinfo, 'defaults' => $defaults));
 }
Exemplo n.º 7
0
 public function run($profile)
 {
     $user = cmsUser::getInstance();
     $template = cmsTemplate::getInstance();
     // проверяем наличие доступа
     if ($profile['id'] != $user->id && !$user->is_admin) {
         cmsCore::error404();
     }
     $pricacy_types = cmsEventsManager::hookAll('user_privacy_types');
     $form = new cmsForm();
     $fieldset_id = $form->addFieldset();
     $default_options = array('', 'anyone', 'friends');
     foreach ($pricacy_types as $list) {
         foreach ($list as $name => $type) {
             $options = array();
             if (!isset($type['options'])) {
                 $type['options'] = $default_options;
             }
             foreach ($type['options'] as $option) {
                 if (!$option) {
                     $options[''] = LANG_USERS_PRIVACY_FOR_NOBODY;
                 } else {
                     $options[$option] = constant('LANG_USERS_PRIVACY_FOR_' . mb_strtoupper($option));
                 }
             }
             $form->addField($fieldset_id, new fieldList($name, array('title' => $type['title'], 'default' => 'anyone', 'items' => $options)));
         }
     }
     // Форма отправлена?
     $is_submitted = $this->request->has('submit');
     $options = $this->model->getUserPrivacyOptions($profile['id']);
     if ($is_submitted) {
         // Парсим форму и получаем поля записи
         $options = array_merge($options, $form->parse($this->request, $is_submitted, $options));
         // Проверям правильность заполнения
         $errors = $form->validate($this, $options);
         if (!$errors) {
             // Обновляем профиль и редиректим на его просмотр
             $this->model->updateUserPrivacyOptions($profile['id'], $options);
             $this->redirectTo('users', $profile['id']);
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return $template->render('profile_edit_privacy', array('id' => $profile['id'], 'profile' => $profile, 'options' => $options, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
Exemplo n.º 8
0
 public function run()
 {
     if (!$this->request->isAjax()) {
         cmsCore::error404();
     }
     $id = $this->request->get('id');
     $section = $this->request->get('section');
     $period = $this->request->get('period');
     if (!$id || !$section || !is_numeric($period)) {
         cmsCore::error404();
     }
     $chart_nav = cmsEventsManager::hookAll('admin_dashboard_chart');
     $source = array();
     foreach ($chart_nav as $ctrl) {
         if ($ctrl['id'] == $id && isset($ctrl['sections'][$section])) {
             $source = $ctrl['sections'][$section];
         }
     }
     if (!$source) {
         cmsCore::error404();
     }
     $data = $this->getData($source, $period);
     $data_formatted = array();
     $result = array();
     if ($period < 300) {
         foreach ($data as $item) {
             $data_formatted[date('d.m', strtotime($item['date']))] = intval($item['count']);
         }
         for ($d = 0; $d <= $period; $d++) {
             $date = date('d.m', strtotime("-{$d} days"));
             $result[$date] = isset($data_formatted[$date]) ? $data_formatted[$date] : 0;
         }
     } else {
         foreach ($data as $item) {
             $data_formatted[date('m.Y', strtotime($item['date']))] = intval($item['count']);
         }
         for ($m = 0; $m <= 12; $m++) {
             $date = date('m.Y', strtotime("-{$m} months"));
             $result[$date] = isset($data_formatted[$date]) ? $data_formatted[$date] : 0;
         }
     }
     $result = array_reverse($result);
     cmsTemplate::getInstance()->renderJSON(array('labels' => array_keys($result), 'values' => array_values($result)));
 }
Exemplo n.º 9
0
            ?>
                        <?php 
        }
        ?>
                    <?php 
    }
    ?>
                </tbody>
            </table>
        </div>
    <?php 
}
?>

    <?php 
$hooks_html = cmsEventsManager::hookAll("content_{$ctype['name']}_item_html", $item);
if ($hooks_html) {
    echo html_each($hooks_html);
}
?>

    <?php 
$is_tags = $ctype['is_tags'] && !empty($ctype['options']['is_tags_in_item']) && $item['tags'];
?>

    <?php 
if ($is_tags) {
    ?>
        <div class="tags_bar">
            <?php 
    echo html_tags_bar($item['tags']);
Exemplo n.º 10
0
 public function run($id = false)
 {
     // редиректим со старых адресов
     if ($id) {
         $photo = $this->model->getPhoto($id);
         if (!$photo || !$photo['slug']) {
             cmsCore::error404();
         }
         $this->redirect(href_to('photos', $photo['slug'] . '.html'), 301);
     }
     $slug = $this->request->get('slug', '');
     if (!$slug) {
         cmsCore::error404();
     }
     $photo = $this->model->getPhoto($slug);
     if (!$photo) {
         cmsCore::error404();
     }
     $album = $this->model->getAlbum($photo['album_id']);
     if (!$album) {
         cmsCore::error404();
     }
     $ctype = $album['ctype'];
     unset($album['ctype']);
     list($photo, $album, $ctype) = cmsEventsManager::hook('photos_before_item', array($photo, $album, $ctype));
     // Проверяем прохождение модерации
     $is_moderator = false;
     if (!$album['is_approved']) {
         $is_moderator = $this->cms_user->is_admin || cmsCore::getModel('content')->userIsContentTypeModerator($ctype['name'], $this->cms_user->id);
         if (!$is_moderator && $this->cms_user->id != $album['user_id']) {
             cmsCore::error404();
         }
     }
     // Проверяем приватность альбома
     if ($album['is_private'] == 1) {
         // доступ только друзьям
         $is_friend = $this->cms_user->isFriend($album['user_id']);
         $is_can_view_private = cmsUser::isAllowed($ctype['name'], 'view_all');
         if (!$is_friend && !$is_can_view_private && !$is_moderator) {
             // если в настройках указано скрывать, 404
             if (empty($ctype['options']['privacy_type']) || $ctype['options']['privacy_type'] == 'hide') {
                 cmsCore::error404();
             }
             // иначе пишем, к кому в друзья нужно проситься
             cmsUser::addSessionMessage(sprintf(LANG_CONTENT_PRIVATE_FRIEND_INFO, !empty($ctype['labels']['one']) ? $ctype['labels']['one'] : LANG_PAGE, href_to('users', $album['user_id']), htmlspecialchars($album['user']['nickname'])), 'info');
             $this->redirect(href_to($ctype['name']));
         }
     }
     // Проверяем приватность фото
     if ($photo['is_private'] == 1) {
         // доступ только друзьям
         $is_friend = $this->cms_user->isFriend($photo['user_id']);
         $is_can_view_private = cmsUser::isAllowed($ctype['name'], 'view_all');
         if (!$is_friend && !$is_can_view_private && !$is_moderator) {
             // иначе пишем, к кому в друзья нужно проситься
             cmsUser::addSessionMessage(sprintf(LANG_CONTENT_PRIVATE_FRIEND_INFO, LANG_PHOTOS_WP_ITEM, href_to('users', $photo['user_id']), htmlspecialchars($photo['user']['nickname'])), 'info');
             $this->redirect(href_to($ctype['name'], $album['slug'] . '.html'));
         }
     }
     // Проверяем ограничения доступа из других контроллеров
     if ($album['is_parent_hidden']) {
         $is_parent_viewable_result = cmsEventsManager::hook('content_view_hidden', array('viewable' => true, 'item' => $album, 'is_moderator' => $is_moderator));
         if (!$is_parent_viewable_result['viewable']) {
             if (isset($is_parent_viewable_result['access_text'])) {
                 cmsUser::addSessionMessage($is_parent_viewable_result['access_text'], 'error');
                 if (isset($is_parent_viewable_result['access_redirect_url'])) {
                     $this->redirect($is_parent_viewable_result['access_redirect_url']);
                 } else {
                     $this->redirect(href_to($ctype['name']));
                 }
             }
             cmsUser::goLogin();
         }
     }
     if ($this->cms_user->id != $photo['user_id']) {
         $this->model->incrementCounter($photo['id']);
     }
     // Рейтинг
     if ($ctype['is_rating'] && $this->isControllerEnabled('rating')) {
         $rating_controller = cmsCore::getController('rating', new cmsRequest(array('target_controller' => $this->name, 'target_subject' => $ctype['name']), cmsRequest::CTX_INTERNAL));
         $is_rating_allowed = cmsUser::isAllowed($ctype['name'], 'rate') && $photo['user_id'] != $this->cms_user->id;
         $photo['rating_widget'] = $rating_controller->getWidget($photo['id'], $photo['rating'], $is_rating_allowed);
     }
     // Комментарии
     if ($ctype['is_comments'] && $this->isControllerEnabled('comments')) {
         $comments_controller = cmsCore::getController('comments', new cmsRequest(array('target_controller' => $this->name, 'target_subject' => 'photo', 'target_id' => $photo['id']), cmsRequest::CTX_INTERNAL));
         $photo['comments_widget'] = $comments_controller->getWidget();
     }
     $is_can_edit = cmsUser::isAllowed($ctype['name'], 'edit', 'all') || cmsUser::isAllowed($ctype['name'], 'edit', 'own') && $album['user_id'] == $this->cms_user->id || $photo['user_id'] == $this->cms_user->id;
     $is_can_delete = cmsUser::isAllowed($ctype['name'], 'delete', 'all') || cmsUser::isAllowed($ctype['name'], 'delete', 'own') && $album['user_id'] == $this->cms_user->id || $photo['user_id'] == $this->cms_user->id;
     $downloads = $this->getDownloadImages($photo);
     $available_downloads = array_filter($downloads, function ($item) {
         return !empty($item['link']);
     });
     $full_size_img_preset = '';
     if ($available_downloads) {
         $download_photo_sizes = array();
         foreach ($available_downloads as $preset => $data) {
             $download_photo_sizes[$preset] = $photo['sizes'][$preset];
         }
         $full_size_img_preset = $this->getMaxSizePresetName($download_photo_sizes);
     }
     $next_photo = $this->model->filterEqual('album_id', $photo['album_id'])->getNextPhoto($photo, $this->options['ordering']);
     $prev_photo = $this->model->filterEqual('album_id', $photo['album_id'])->getPrevPhoto($photo, $this->options['ordering']);
     $tpl = 'view';
     $preset = $this->getBigPreset($photo['sizes']);
     if ($this->request->isAjax()) {
         $tpl = 'view_photo_container';
         if ($full_size_img_preset) {
             $preset = $full_size_img_preset;
         }
     }
     return $this->cms_template->render($tpl, array('next_photo' => $next_photo, 'prev_photo' => $prev_photo, 'downloads' => $downloads, 'is_can_edit' => $is_can_edit, 'is_can_delete' => $is_can_delete, 'user' => $this->cms_user, 'preset' => $preset, 'preset_small' => !empty($this->options['preset_related']) ? $this->options['preset_related'] : $this->options['preset_small'], 'photo' => $photo, 'photos' => $this->getRelatedPhoto($photo), 'related_title' => $this->related_title, 'album' => $album, 'ctype' => $ctype, 'photo_details' => $this->buildPhotoDetails($photo, $album, $ctype), 'hooks_html' => cmsEventsManager::hookAll('photos_item_html', $photo), 'full_size_img' => $full_size_img_preset ? $available_downloads[$full_size_img_preset]['image'] : ''));
 }
Exemplo n.º 11
0
                });

        </script>
    <?php 
}
?>

    <?php 
if (!empty($attributes['hook'])) {
    ?>

        <?php 
    $param = empty($attributes['hook']['param']) ? false : $attributes['hook']['param'];
    ?>
        <?php 
    $hooks_html = cmsEventsManager::hookAll($attributes['hook']['event'], $param);
    ?>
        <?php 
    if ($hooks_html) {
        echo html_each($hooks_html);
    }
    ?>

    <?php 
}
?>

    <?php 
echo $append_html;
?>
Exemplo n.º 12
0
 public function search($query, $type, $date, $ctype_name, $page = 1)
 {
     $user = cmsUser::getInstance();
     $content_model = cmsCore::getModel('content');
     $ctypes = $content_model->getContentTypes();
     $results = array();
     if (!$this->model->setQuery($query)) {
         cmsUser::addSessionMessage(LANG_SEARCH_TOO_SHORT, 'error');
         return false;
     }
     $this->model->setSearchType($type);
     $this->model->setDateInterval($date);
     $this->model->limitPage($page, $this->options['perpage']);
     $is_results_found = false;
     $allowed_ctypes = $this->options['ctypes'];
     foreach ($ctypes as $ctype) {
         if (!in_array($ctype['name'], $allowed_ctypes)) {
             continue;
         }
         $result = array();
         $sql_fields = array();
         $default_fields = $this->default_sql_fields;
         $fields = $content_model->getContentFields($ctype['name']);
         foreach ($fields as $field) {
             // индексы создаются только на поля типа caption, text, html
             // в настройках полей должно быть включено их участие в индексе
             $is_text = in_array($field['type'], array('caption', 'text', 'html')) && $field['handler']->getOption('in_fulltext_search');
             if ($is_text && !$field['is_private'] && (!$field['groups_read'] || $user->isInGroups($field['groups_read']))) {
                 $sql_fields[] = $field['name'];
             }
             if ($field['name'] == 'photo' && !$field['is_private'] && (!$field['groups_read'] || $user->isInGroups($field['groups_read']))) {
                 $default_fields[] = $field['name'];
             }
         }
         // если нет полей для поиска, пропускаем
         if (!$sql_fields) {
             continue;
         }
         $table_name = $content_model->getContentTypeTableName($ctype['name']);
         $results_count = $this->model->getSearchResultsCount($table_name, $sql_fields);
         if ($results_count) {
             if ($ctype_name == $ctype['name'] || !$ctype_name && !$is_results_found) {
                 $result = $this->model->getSearchResults($table_name, $sql_fields, $default_fields, function ($item, $model) use($ctype) {
                     if (!empty($item['photo'])) {
                         $item['photo'] = html_image($item['photo'], 'small', $item['title']);
                         if (!$item['photo']) {
                             unset($item['photo']);
                         }
                     }
                     $item['url'] = href_to($ctype['name'], $item['slug'] . '.html');
                     return $item;
                 });
                 $result = cmsEventsManager::hook("content_{$ctype['name']}_search_list", $result);
                 $is_results_found = true;
             }
             $results[] = array('title' => $ctype['title'], 'name' => $ctype['name'], 'items' => $result, 'count' => $results_count);
         }
     }
     // результаты от других контроллеров
     $components_results = cmsEventsManager::hookAll('fulltext_search', array($this->model, $ctype_name));
     if ($components_results) {
         foreach ($components_results as $components_result) {
             $results[] = $components_result;
         }
     }
     return $results;
 }
Exemplo n.º 13
0
 public function run($profile, $do = false)
 {
     if (!cmsUser::isLogged()) {
         cmsCore::error404();
     }
     $user = cmsUser::getInstance();
     // если нужно, передаем управление другому экшену
     if ($do) {
         $this->runAction('profile_edit_' . $do, array($profile) + array_slice($this->params, 2));
         return;
     }
     // проверяем наличие доступа
     if ($profile['id'] != $user->id && !$user->is_admin) {
         cmsCore::error404();
     }
     // Получаем поля
     $content_model = cmsCore::getModel('content');
     $content_model->setTablePrefix('');
     $content_model->orderBy('ordering');
     $fields = $content_model->getContentFields('{users}');
     // Строим форму
     $form = new cmsForm();
     // Разбиваем поля по группам
     $fieldsets = cmsForm::mapFieldsToFieldsets($fields, function ($field, $user) {
         // проверяем что группа пользователя имеет доступ к редактированию этого поля
         if ($field['groups_edit'] && !$user->isInGroups($field['groups_edit'])) {
             return false;
         }
         return true;
     });
     // Добавляем поля в форму
     foreach ($fieldsets as $fieldset) {
         $fieldset_id = $form->addFieldset($fieldset['title']);
         foreach ($fieldset['fields'] as $field) {
             // добавляем поле в форму
             $form->addField($fieldset_id, $field['handler']);
         }
     }
     // Добавляем поле выбора часового пояса
     $config = cmsConfig::getInstance();
     $fieldset_id = $form->addFieldset(LANG_TIME_ZONE);
     $form->addField($fieldset_id, new fieldList('time_zone', array('default' => $config->time_zone, 'generator' => function ($item) {
         return cmsCore::getTimeZones();
     })));
     // Форма отправлена?
     $is_submitted = $this->request->has('submit');
     if ($is_submitted) {
         // Парсим форму и получаем поля записи
         $new = $form->parse($this->request, $is_submitted, $profile);
         $old = $profile;
         $profile = array_merge($profile, $new);
         // Проверям правильность заполнения
         $errors = $form->validate($this, $profile);
         if (!$errors) {
             $is_allowed = cmsEventsManager::hookAll('user_profile_update', $profile, true);
             if ($is_allowed !== true && in_array(false, $is_allowed)) {
                 $errors = true;
             }
         }
         if (!$errors) {
             // Обновляем профиль и редиректим на его просмотр
             $this->model->updateUser($profile['id'], $profile);
             // Отдельно обновляем часовой пояс в сессии
             cmsUser::sessionSet('user_data:time_zone', $profile['time_zone']);
             // Постим уведомление о смене аватара в ленту
             if (!$this->model->isAvatarsEqual($new['avatar'], $old['avatar'])) {
                 $activity_controller = cmsCore::getController('activity');
                 $activity_controller->deleteEntry($this->name, "avatar", $profile['id']);
                 if (!empty($new['avatar'])) {
                     $activity_controller->addEntry($this->name, "avatar", array('user_id' => $profile['id'], 'subject_title' => $profile['nickname'], 'subject_id' => $profile['id'], 'subject_url' => href_to('users', $profile['id']), 'is_private' => 0, 'group_id' => null, 'images' => array(array('url' => href_to('users', $profile['id']), 'src' => html_image_src($new['avatar'], 'normal'))), 'images_count' => 1));
                 }
             }
             $this->redirectTo('users', $profile['id']);
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     return cmsTemplate::getInstance()->render('profile_edit', array('do' => 'edit', 'id' => $profile['id'], 'profile' => $profile, 'form' => $form, 'errors' => isset($errors) ? $errors : false));
 }
Exemplo n.º 14
0
</a>
                    <?php 
        }
        ?>
                </li>
            <?php 
    }
    ?>
        </ul>
    </div>
<?php 
}
?>

<div id="user_content_list">
    <?php 
echo $html;
?>
</div>

<?php 
$hooks_html = cmsEventsManager::hookAll("content_{$ctype['name']}_items_html", array('user_view', $ctype, $profile, !empty($current_folder) ? $current_folder : array()));
if ($hooks_html) {
    ?>
    <div class="sub_items_list">
        <?php 
    echo html_each($hooks_html);
    ?>
    </div>
<?php 
}
Exemplo n.º 15
0
 public function run($target = false)
 {
     $query = $this->request->get('q', '');
     $type = $this->request->get('type', 'words');
     $date = $this->request->get('date', 'all');
     $page = $this->request->get('page', 1);
     if (!in_array($type, array('words', 'exact'), true)) {
         cmsCore::error404();
     }
     if (!in_array($date, array('all', 'w', 'm', 'y'), true)) {
         cmsCore::error404();
     }
     if (!is_numeric($page)) {
         cmsCore::error404();
     }
     if ($this->request->has('q')) {
         if (!$query || !$this->model->setQuery($query)) {
             cmsUser::addSessionMessage(LANG_SEARCH_TOO_SHORT, 'error');
             $this->redirectToAction('');
         }
         $this->model->setSearchType($type);
         $this->model->setDateInterval($date);
         $this->model->limitPage($page, $this->options['perpage']);
         $search_controllers = cmsEventsManager::hookAll('fulltext_search', false, array());
         if (!$target) {
             $page_url = href_to($this->name);
         } else {
             $page_url = href_to($this->name, 'index', $target);
         }
         // найден ли результат
         $is_results_found = false;
         foreach ($search_controllers as $search_controller) {
             $search_controller = cmsEventsManager::hook("search_{$search_controller['name']}_data", $search_controller);
             foreach ($search_controller['sources'] as $sources_name => $sources_title) {
                 // выключено?
                 if (!empty($this->options['types']) && !in_array($sources_name, $this->options['types'])) {
                     continue;
                 }
                 // есть поля для поиска?
                 if (empty($search_controller['match_fields'][$sources_name])) {
                     continue;
                 }
                 // есть ли что-то по поисковому запросу у этого назначения?
                 $results_count = $this->model->getSearchResultsCount($search_controller['table_names'][$sources_name], $search_controller['match_fields'][$sources_name], $search_controller['filters'][$sources_name]);
                 // сами результаты ищем только у первого найденного
                 // или у переданного
                 // для остальных считаем количество
                 if ($results_count) {
                     $result = array();
                     if (!$is_results_found && ($target && $target == $sources_name || !$target)) {
                         $result = $this->model->getSearchResults($search_controller['table_names'][$sources_name], $search_controller['match_fields'][$sources_name], $search_controller['select_fields'][$sources_name], $search_controller['filters'][$sources_name], $search_controller['item_callback'], $sources_name);
                         $result = cmsEventsManager::hook("content_{$sources_name}_search_list", $result);
                         $is_results_found = true;
                         $target = $sources_name;
                         $target_title = $sources_title;
                     }
                     $results[] = array('title' => $sources_title, 'name' => $sources_name, 'items' => $result, 'count' => $results_count);
                 }
             }
         }
     }
     // если есть отдельный шаблон, используем его
     $tpl = 'index_' . $target;
     if (!$this->cms_template->getTemplateFileName('controllers/search/' . $tpl, true)) {
         $tpl = 'index';
     }
     return $this->cms_template->render($tpl, array('user' => $this->cms_user, 'query' => $query, 'type' => $type, 'date' => $date, 'target' => $target, 'target_title' => !empty($target_title) ? mb_strtolower($target_title) : '', 'page' => $page, 'perpage' => $this->options['perpage'], 'results' => isset($results) ? $results : false, 'page_url' => isset($page_url) ? $page_url : false));
 }
Exemplo n.º 16
0
        echo href_to($base_url . ($dataset ? '-' . $dataset : ''), $c['slug']);
        ?>
"><?php 
        echo $c['title'];
        ?>
</a>
                </li>
            <?php 
    }
    ?>
        </ul>
    </div>
<?php 
}
?>

<?php 
echo $items_list_html;
?>

<?php 
$hooks_html = cmsEventsManager::hookAll("content_{$ctype['name']}_items_html", array('category_view', $ctype, $category, $current_dataset));
if ($hooks_html) {
    ?>
    <div class="sub_items_list">
        <?php 
    echo html_each($hooks_html);
    ?>
    </div>
<?php 
}