function rss_content($item_id, $cfg) { if (!cmsCore::getInstance()->isComponentEnable('content')) { return false; } global $_LANG; $channel = array(); $items = array(); if ($item_id) { $cat = cmsCore::c('db')->getNsCategory('cms_category', (int)$item_id); if (!$cat) { return false; } $cat = cmsCore::callEvent('GET_CONTENT_CAT', $cat); if (!$cat['published']) { return false; } if (!cmsCore::checkUserAccess('category', $cat['id']) ) { return false; } cmsCore::m('content')->whereThisAndNestedCats($cat['NSLeft'], $cat['NSRight']); $channel['title'] = $cat['title'] ; $channel['description'] = $cat['description']; $channel['link'] = HOST . cmsCore::m('content')->getCategoryURL(0, $cat['seolink']); } else { $channel['title'] = $_LANG['NEW_MATERIALS']; $channel['description'] = $_LANG['LAST_ARTICLES_NEWS']; $channel['link'] = HOST .'/content'; } cmsCore::c('db')->where('con.showlatest = 1'); cmsCore::c('db')->orderBy('con.pubdate', 'DESC'); cmsCore::c('db')->limit($cfg['maxitems']); $content = cmsCore::m('content')->getArticlesList(); if ($content) { foreach($content as $con){ $con['link'] = HOST . $con['url']; $con['comments'] = $con['link'].'#c'; $con['category'] = $con['cat_title']; if ($con['image']) { $con['size'] = round(filesize(PATH . $con['image'])); $con['image'] = HOST . $con['image']; } $items[] = $con; } } return array( 'channel' => $channel, 'items' => $items ); }
/** * Возвращает категории, доступные для публикования в них * @return array */ public function getPublicCats() { $inCore = cmsCore::getInstance(); $inUser = cmsUser::getInstance(); $nested_sets = $inCore->nestedSetsInit('cms_category'); $rootid = $this->inDB->getNsRootCatId('cms_category'); $rs_rows = $nested_sets->SelectSubNodes($rootid); if ($rs_rows) { while ($node = $this->inDB->fetch_assoc($rs_rows)) { if ($inUser->is_admin || cmsCore::checkUserAccess('category', $node['id']) && ($node['is_public'] || $node['modgrp_id'] && $node['modgrp_id'] == $inUser->group_id && cmsUser::isUserCan('content/autoadd'))) { $subcats[] = $node; } } } $subcats = cmsCore::callEvent('GET_CONTENT_PUBCATS', $subcats); return translations::process(cmsConfig::getConfig('lang'), 'content_category', $subcats); }
function content() { $inCore = cmsCore::getInstance(); if (!defined('IS_BILLING')) { define('IS_BILLING', $inCore->isComponentInstalled('billing')); } if (IS_BILLING) { cmsCore::loadClass('billing'); } global $_LANG; $id = cmsCore::request('id', 'int', 0); $do = $inCore->do; $seolink = cmsCore::strClear(urldecode(cmsCore::request('seolink', 'html', ''))); if (is_numeric($seolink)) { cmsCore::error404(); } $page = cmsCore::request('page', 'int', 1); ///////////////////////////////////// VIEW CATEGORY //////////////////////////////////////////////////////////////////////////////// if ($do == 'view') { $cat = cmsCore::c('db')->getNsCategory('cms_category', $seolink); // если не найдена категория и мы не на главной, 404 if (!$cat && $inCore->menuId() !== 1) { cmsCore::error404(); } // Плагины $cat = cmsCore::callEvent('GET_CONTENT_CAT', $cat); // Неопубликованные показываем только админам if (!$cat['published'] && !cmsCore::c('user')->is_admin) { cmsCore::error404(); } // Проверяем доступ к категории if (!cmsCore::checkUserAccess('category', $cat['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'].'<br>'.$_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect('/content'); } // если не корень категорий if ($cat['NSLevel'] > 0) { cmsCore::c('page')->setTitle(empty($cat['pagetitle']) ? $cat['title'] : $cat['pagetitle']); // meta description if (!empty($cat['meta_desc'])) { $meta_desc = $cat['meta_desc']; } else if (mb_strlen(strip_tags($cat['description']))>=250) { $meta_desc = crop($cat['description']); } else { $meta_desc = $cat['title']; } cmsCore::c('page')->setDescription($meta_desc); // meta keywords if (!empty($cat['meta_keys'])) { $meta_keys = $cat['meta_keys']; } else if ($content_list) { foreach($content_list as $c) { $k[] = $c['title']; } $meta_keys = implode(', ', $k); } else { $meta_keys = $cat['title']; } cmsCore::c('page')->setKeywords($meta_keys); $pagetitle = $cat['title']; $showdate = $cat['showdate']; $showcomm = $cat['showcomm']; cmsCore::c('page')->addHead('<link rel="alternate" type="application/rss+xml" title="'. htmlspecialchars($cat['title']) .'" href="'. HOST .'/rss/content/'. $cat['id'] .'/feed.rss">'); } // Если корневая категория if ($cat['NSLevel'] == 0) { if ($model->config['hide_root']) { cmsCore::error404(); } cmsCore::c('page')->setTitle(empty(cmsCore::m('content')->config['pagetitle']) ? $_LANG['CATALOG_ARTICLES'] : cmsCore::m('content')->config['pagetitle']); if (!empty(cmsCore::m('content')->config['meta_keys'])) { cmsCore::c('page')->setKeywords(cmsCore::m('content')->config['meta_keys']); } if (!empty(cmsCore::m('content')->config['meta_desc'])) { cmsCore::c('page')->setDescription(cmsCore::m('content')->config['meta_keys']); } $pagetitle = $_LANG['CATALOG_ARTICLES']; $showdate = 1; $showcomm = 1; } // Получаем дерево категорий $path_list = cmsCore::c('db')->getNsCategoryPath('cms_category', $cat['NSLeft'], $cat['NSRight'], 'id, title, NSLevel, seolink, url'); if ($path_list) { foreach ($path_list as $pcat) { if (!cmsCore::checkUserAccess('category', $pcat['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'].'<br>'.$_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect('/content'); } cmsCore::c('page')->addPathway($pcat['title'], cmsCore::m('content')->getCategoryURL(null, $pcat['seolink'])); } } // Получаем подкатегории $subcats_list = cmsCore::m('content')->getSubCats($cat['id']); // Привязанный фотоальбом $cat_photos = cmsCore::m('content')->getCatPhotoAlbum($cat['photoalbum']); // Получаем статьи // Редактор/администратор $is_editor = (($cat['modgrp_id'] == cmsCore::c('user')->group_id && cmsUser::isUserCan('content/autoadd')) || cmsCore::c('user')->is_admin); // Условия cmsCore::m('content')->whereCatIs($cat['id']); // Общее количество статей $total = cmsCore::m('content')->getArticlesCount($is_editor); // Сортировка и разбивка на страницы cmsCore::c('db')->orderBy($cat['orderby'], $cat['orderto']); cmsCore::c('db')->limitPage($page, cmsCore::m('content')->config['perpage']); // Получаем статьи $content_list = $total ? cmsCore::m('content')->getArticlesList(!$is_editor) : array(); cmsCore::c('db')->resetConditions(); if (!$content_list && $page > 1) { cmsCore::error404(); } $pagebar = cmsPage::getPagebar($total, $page, cmsCore::m('content')->config['perpage'], cmsCore::m('content')->getCategoryURL(null, $cat['seolink'], 0, true)); $template = ($cat['tpl'] ? $cat['tpl'] : 'com_content_view'); cmsPage::initTemplate('components', $template)-> assign('cat', $cat)-> assign('is_homepage', (bool)($inCore->menuId()==1))-> assign('showdate', $showdate)-> assign('showcomm', $showcomm)-> assign('pagetitle', $pagetitle)-> assign('subcats', $subcats_list)-> assign('cat_photos', $cat_photos)-> assign('articles', $content_list)-> assign('pagebar', $pagebar)-> display(); } ///////////////////////////////////// READ ARTICLE //////////////////////////////////////////////////////////////////////////////// if ($do == 'read') { // Получаем статью $article = cmsCore::m('content')->getArticle($seolink); if (!$article) { cmsCore::error404(); } $article = cmsCore::callEvent('GET_ARTICLE', $article); $is_admin = cmsCore::c('user')->is_admin; $is_author = cmsCore::c('user')->id == $article['user_id']; $is_author_del = cmsUser::isUserCan('content/delete'); $is_editor = ($article['modgrp_id'] == cmsCore::c('user')->group_id && cmsUser::isUserCan('content/autoadd')); // если статья не опубликована или дата публикации позже, 404 if ((!$article['published'] || strtotime($article['pubdate']) > time()) && !$is_admin && !$is_editor && !$is_author) { cmsCore::error404(); } if (!cmsCore::checkUserAccess('material', $article['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'].'<br>'.$_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect(cmsCore::m('content')->getCategoryURL(null, $article['catseolink'])); } // увеличиваем кол-во просмотров if (@!$is_author) { cmsCore::c('db')->setFlag('cms_content', $article['id'], 'hits', $article['hits']+1); } // Заголовок страницы $article['pagetitle'] = $article['pagetitle'] ? $article['pagetitle'] : $article['title']; // Тело статьи в зависимости от настроек $article['content'] = cmsCore::m('content')->config['readdesc'] ? $article['description'].$article['content'] : $article['content']; // Дата публикации $article['pubdate'] = cmsCore::dateFormat($article['pubdate']); // Шаблон статьи $article['tpl'] = $article['tpl'] ? $article['tpl'] : 'com_content_read'; cmsCore::c('page')->setTitle($article['pagetitle']); // Получаем дерево категорий $path_list = $article['showpath'] ? cmsCore::c('db')->getNsCategoryPath('cms_category', $article['leftkey'], $article['rightkey'], 'id, title, NSLevel, seolink, url') : array(); if ($path_list) { foreach ($path_list as $pcat) { if (!cmsCore::checkUserAccess('category', $pcat['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'].'<br>'.$_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect('/content'); } cmsCore::c('page')->addPathway($pcat['title'], cmsCore::m('content')->getCategoryURL(null, $pcat['seolink'])); } } cmsCore::c('page')->addPathway($article['title']); // Мета теги KEYWORDS и DESCRIPTION if ($article['meta_keys']) { cmsCore::c('page')->setKeywords($article['meta_keys']); } else { if (mb_strlen($article['content'])>30) { cmsCore::c('page')->setKeywords(cmsCore::getKeywords(cmsCore::strClear($article['content']))); } } if (!empty($article['meta_desc'])) { cmsCore::c('page')->setDescription($article['meta_desc']); } // Выполняем фильтры $article['content'] = cmsCore::processFilters($article['content']); // Разбивка статей на страницы $pt_pages = array(); if (!empty($GLOBALS['pt'])) { foreach ($GLOBALS['pt'] as $num=>$page_title) { $pt_pages[$num]['title'] = $page_title; $pt_pages[$num]['url'] = cmsCore::m('content')->getArticleURL(null, $article['seolink'], $num+1); } } // Рейтинг статьи if (cmsCore::m('content')->config['rating'] && $article['canrate']) { $karma = cmsKarma('content', $article['id']); $karma_points = cmsKarmaFormatSmall($karma['points']); $btns = cmsKarmaButtonsText('content', $article['id'], $karma['points'], $is_author); } cmsPage::initTemplate('components', $article['tpl'])-> assign('article', $article)-> assign('cfg', cmsCore::m('content')->config)-> assign('page', $page)-> assign('is_pages', !empty($GLOBALS['pt']))-> assign('pt_pages', $pt_pages)-> assign('is_admin', $is_admin)-> assign('is_editor', $is_editor)-> assign('is_author', $is_author)-> assign('is_author_del', $is_author_del)-> assign('tagbar', cmsTagBar('content', $article['id']))-> assign('karma_points', @$karma_points)-> assign('karma_votes', @$karma['votes'])-> assign('karma_buttons', @$btns)-> display(); // Комментарии статьи if ($article['published'] && $article['comments'] && $inCore->isComponentEnable('comments')) { cmsCore::includeComments(); comments('article', $article['id'], array(), $is_author); } } ///////////////////////////////////// ADD ARTICLE ////////////////////////////////////////////////////////////////////////////////// if ($do == 'addarticle' || $do == 'editarticle') { $is_add = cmsUser::isUserCan('content/add'); // может добавлять статьи $is_auto_add = cmsUser::isUserCan('content/autoadd'); // добавлять статьи без модерации if (!$is_add) { cmsCore::error404(); } // Для редактирования получаем статью и проверяем доступ if ($do == 'editarticle') { // Получаем статью $item = cmsCore::m('content')->getArticle($id); if (!$item) { cmsCore::error404(); } $pubcats = array(); // доступ к редактированию админам, авторам и редакторам if (!cmsCore::c('user')->is_admin && ($item['user_id'] != cmsCore::c('user')->id) && !($item['modgrp_id'] == cmsCore::c('user')->group_id && cmsUser::isUserCan('content/autoadd'))) { cmsCore::error404(); } } // Для добавления проверяем не вводили ли мы данные ранее if ($do=='addarticle') { $item = cmsUser::sessionGet('article'); if ($item) { cmsUser::sessionDel('article'); } $item['images'] = cmsCore::getUploadImages(0, '', 'cms_content_images', 'content'); // Категории, в которые разрешено публиковать $pubcats = cmsCore::m('content')->getPublicCats(); if (!$pubcats) { cmsCore::addSessionMessage($_LANG['ADD_ARTICLE_ERR_CAT'], 'error'); cmsCore::redirectBack(); } } // не было запроса на сохранение, показываем форму if (!cmsCore::inRequest('add_mod')) { $dynamic_cost = false; // Если добавляем статью if ($do == 'addarticle') { $pagetitle = $_LANG['ADD_ARTICLE']; cmsCore::c('page')->setTitle($pagetitle); cmsCore::c('page')->addPathway($_LANG['USERS'], '/'.str_replace('/', '', cmsUser::PROFILE_LINK_PREFIX)); cmsCore::c('page')->addPathway(cmsCore::c('user')->nickname, cmsUser::getProfileURL(cmsCore::c('user')->login)); cmsCore::c('page')->addPathway($_LANG['MY_ARTICLES'], '/content/my.html'); cmsCore::c('page')->addPathway($pagetitle); // поддержка биллинга if (IS_BILLING) { $action = cmsBilling::getAction('content', 'add_content'); foreach ($pubcats as $p=>$pubcat) { if ($pubcat['cost']) { $dynamic_cost = true; } else { $pubcats[$p]['cost'] = $action['point_cost'][cmsCore::c('user')->group_id]; } } cmsBilling::checkBalance('content', 'add_content', $dynamic_cost); } } // Если редактируем статью if ($do == 'editarticle') { $pagetitle = $_LANG['EDIT_ARTICLE']; cmsCore::c('page')->setTitle($pagetitle); cmsCore::c('page')->addPathway($_LANG['USERS'], '/'.str_replace('/', '', cmsUser::PROFILE_LINK_PREFIX)); if ($item['user_id'] != cmsCore::c('user')->id) { $user = cmsCore::c('db')->get_fields('cms_users', "id='{$item['user_id']}'", 'login, nickname'); cmsCore::c('page')->addPathway($user['nickname'], cmsUser::getProfileURL($user['login'])); } else { cmsCore::c('page')->addPathway(cmsCore::c('user')->nickname, cmsUser::getProfileURL(cmsCore::c('user')->login)); } cmsCore::c('page')->addPathway($_LANG['MY_ARTICLES'], '/content/my.html'); cmsCore::c('page')->addPathway($pagetitle); $item['tags'] = cmsTagLine('content', $item['id'], false); if (!$is_auto_add) { cmsCore::addSessionMessage($_LANG['ATTENTION'].': '.$_LANG['EDIT_ARTICLE_PREMODER'], 'info'); } } cmsCore::c('page')->initAutocomplete(); $autocomplete_js = cmsCore::c('page')->getAutocompleteJS('tagsearch', 'tags'); $item = cmsCore::callEvent('PRE_EDIT_ARTICLE', (@$item ? $item : array())); if (cmsCore::m('content')->config['img_on']) { $ajaxUploader = cmsCore::c('page')->initAjaxUpload( 'plupload', array( 'component' => 'content', 'target_id' => empty($item['id']) ? 0 : $item['id'], 'insertEditor' => 'content' ), empty($item['images']) ? false : $item['images'] ); } cmsPage::initTemplate('components', 'com_content_edit')-> assign('mod', $item)-> assign('do', $do)-> assign('cfg', cmsCore::m('content')->config)-> assign('pubcats', $pubcats)-> assign('pagetitle', $pagetitle)-> assign('is_admin', cmsCore::c('user')->is_admin)-> assign('is_billing', IS_BILLING)-> assign('dynamic_cost', $dynamic_cost)-> assign('autocomplete_js', $autocomplete_js)-> assign('ajaxUploader', !empty($ajaxUploader) ? $ajaxUploader : '')-> display(); } // Пришел запрос на сохранение статьи if (cmsCore::inRequest('add_mod')) { $errors = false; $article['category_id'] = cmsCore::request('category_id', 'int', 1); $article['user_id'] = $item['user_id'] ? $item['user_id'] : cmsCore::c('user')->id; $article['title'] = cmsCore::request('title', 'str', ''); $article['tags'] = cmsCore::request('tags', 'str', ''); $article['description'] = cmsCore::request('description', 'html', ''); $article['content'] = cmsCore::request('content', 'html', ''); $article['description'] = cmsCore::badTagClear($article['description']); $article['content'] = cmsCore::badTagClear($article['content']); $article['published'] = $is_auto_add ? 1 : 0; if ($do=='editarticle') { $article['published'] = ($item['published'] == 0) ? $item['published'] : $article['published']; } $article['pubdate'] = $do=='editarticle' ? $item['pubdate'] : date('Y-m-d H:i'); $article['enddate'] = $do=='editarticle' ? $item['enddate'] : $article['pubdate']; $article['is_end'] = $do=='editarticle' ? $item['is_end'] : 0; $article['showtitle'] = $do=='editarticle' ? $item['showtitle'] : 1; $article['meta_desc'] = $do=='addarticle' ? mb_strtolower($article['title']) : cmsCore::c('db')->escape_string($item['meta_desc']); $article['meta_keys'] = $do=='addarticle' ? $inCore->getKeywords($article['content']) : cmsCore::c('db')->escape_string($item['meta_keys']); $article['showdate'] = $do=='editarticle' ? $item['showdate'] : 1; $article['showlatest'] = $do=='editarticle' ? $item['showlatest'] : 1; $article['showpath'] = $do=='editarticle' ? $item['showpath'] : 1; $article['comments'] = $do=='editarticle' ? $item['comments'] : 1; $article['canrate'] = $do=='editarticle' ? $item['canrate'] : 1; $article['pagetitle'] = ''; if ($do=='editarticle') { $article['tpl'] = $item['tpl']; } if (mb_strlen($article['title']) < 2) { cmsCore::addSessionMessage($_LANG['REQ_TITLE'], 'error'); $errors = true; } if (mb_strlen($article['content']) < 10) { cmsCore::addSessionMessage($_LANG['REQ_CONTENT'], 'error'); $errors = true; } if ($errors) { // При добавлении статьи при ошибках сохраняем введенные поля if ($do == 'addarticle') { cmsUser::sessionPut('article', $article); } cmsCore::redirectBack(); } $article['description'] = cmsCore::c('db')->escape_string($article['description']); $article['content'] = cmsCore::c('db')->escape_string($article['content']); $article = cmsCore::callEvent('AFTER_EDIT_ARTICLE', $article); // добавление статьи if ($do == 'addarticle') { $article_id = cmsCore::m('content')->addArticle($article); } // загрузка фото cmsCore::m('content')->uploadArticeImage((!empty($article_id) ? $article_id : $item['id']), cmsCore::request('delete_image', 'int', 0)); // операции после добавления/редактирования статьи // добавление статьи if ($do == 'addarticle') { // Получаем добавленную статью $article = cmsCore::m('content')->getArticle($article_id); if (!$article['published']) { cmsCore::addSessionMessage($_LANG['ARTICLE_PREMODER_TEXT'], 'info'); // отсылаем уведомление администраторам $link = '<a href="'.cmsCore::m('content')->getArticleURL(null, $article['seolink']).'">'.$article['title'].'</a>'; $message = str_replace('%user%', cmsUser::getProfileLink(cmsCore::c('user')->login, cmsCore::c('user')->nickname), $_LANG['MSG_ARTICLE_SUBMIT']); $message = str_replace('%link%', $link, $message); cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message); } else { //регистрируем событие cmsActions::log('add_article', array( 'object' => $article['title'], 'object_url' => cmsCore::m('content')->getArticleURL(null, $article['seolink']), 'object_id' => $article['id'], 'target' => $article['cat_title'], 'target_url' => cmsCore::m('content')->getCategoryURL(null, $article['catseolink']), 'target_id' => $article['category_id'], 'description' => '' )); if (IS_BILLING) { $category_cost = $article['cost']==='' ? false : (int)$article['cost']; cmsBilling::process('content', 'add_content', $category_cost); } cmsUser::checkAwards(cmsCore::c('user')->id); } cmsCore::addSessionMessage($_LANG['ARTICLE_SAVE'], 'info'); cmsCore::redirect('/my.html'); } // Редактирование статьи if ($do == 'editarticle') { cmsCore::m('content')->updateArticle($item['id'], $article, true); cmsActions::updateLog('add_article', array('object' => $article['title']), $item['id']); if (!$article['published']) { $link = '<a href="'.cmsCore::m('content')->getArticleURL(null, $item['seolink']).'">'.$article['title'].'</a>'; $message = str_replace('%user%', cmsUser::getProfileLink(cmsCore::c('user')->login, cmsCore::c('user')->nickname), $_LANG['MSG_ARTICLE_EDITED']); $message = str_replace('%link%', $link, $message); cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message); } $mess = $article['published'] ? $_LANG['ARTICLE_SAVE'] : $_LANG['ARTICLE_SAVE'].' '.$_LANG['ARTICLE_PREMODER_TEXT']; cmsCore::addSessionMessage($mess, 'info'); cmsCore::redirect(cmsCore::m('content')->getArticleURL(null, $item['seolink'])); } } } ///////////////////////// PUBLISH ARTICLE ///////////////////////////////////////////////////////////////////////////// if ($do == 'publisharticle') { if (!cmsCore::c('user')->id) { cmsCore::error404(); } $article = cmsCore::m('content')->getArticle($id); if (!$article) { cmsCore::error404(); } // Редактор с правами на добавление без модерации или администраторы могут публиковать if (!(($article['modgrp_id'] == cmsCore::c('user')->group_id) && cmsUser::isUserCan('content/autoadd')) && !cmsCore::c('user')->is_admin) { cmsCore::error404(); } cmsCore::c('db')->setFlag('cms_content', $article['id'], 'published', 1); cmsCore::callEvent('ADD_ARTICLE_DONE', $article); if (IS_BILLING) { $author = cmsCore::c('db')->get_fields('cms_users', "id='{$article['user_id']}'", '*'); $category_cost = $article['cost']==='' ? false : (int)$article['cost']; cmsBilling::process('content', 'add_content', $category_cost, $author); } //регистрируем событие cmsActions::log('add_article', array( 'object' => $article['title'], 'user_id' => $article['user_id'], 'object_url' => cmsCore::m('content')->getArticleURL(null, $article['seolink']), 'object_id' => $article['id'], 'target' => $article['cat_title'], 'target_url' => cmsCore::m('content')->getCategoryURL(null, $article['catseolink']), 'target_id' => $article['cat_id'], 'description' => '' )); $link = '<a href="'.cmsCore::m('content')->getArticleURL(null, $article['seolink']).'">'.$article['title'].'</a>'; $message = str_replace('%link%', $link, $_LANG['MSG_ARTICLE_ACCEPTED']); cmsUser::sendMessage(USER_UPDATER, $article['user_id'], $message); cmsUser::checkAwards($article['user_id']); cmsCore::redirectBack(); } ///////////////////////////////////// DELETE ARTICLE /////////////////////////////////////////////////////////////////////////////////// if ($do == 'deletearticle') { if (!cmsCore::c('user')->id) { cmsCore::error404(); } $article = cmsCore::m('content')->getArticle($id); if (!$article) { cmsCore::error404(); } // права доступа $is_author = cmsUser::isUserCan('content/delete') && ($article['user_id'] == cmsCore::c('user')->id); $is_editor = ($article['modgrp_id'] == cmsCore::c('user')->group_id) && cmsUser::isUserCan('content/autoadd'); if (!$is_author && !$is_editor && !cmsCore::c('user')->is_admin) { cmsCore::error404(); } if (!cmsCore::inRequest('goadd')) { cmsCore::c('page')->setTitle($_LANG['ARTICLE_REMOVAL']); cmsCore::c('page')->addPathway($_LANG['ARTICLE_REMOVAL']); $confirm['title'] = $_LANG['ARTICLE_REMOVAL']; $confirm['text'] = $_LANG['ARTICLE_REMOVAL_TEXT'].' <a href="'.cmsCore::m('content')->getArticleURL(null, $article['seolink']).'">'.$article['title'].'</a>?'; $confirm['action'] = $_SERVER['REQUEST_URI']; $confirm['yes_button'] = array(); $confirm['yes_button']['type'] = 'submit'; $confirm['yes_button']['name'] = 'goadd'; cmsPage::initTemplate('components', 'action_confirm')-> assign('confirm', $confirm)-> display(); } else { cmsCore::m('content')->deleteArticle($article['id']); if ($_SERVER['HTTP_REFERER'] == '/my.html' ) { cmsCore::addSessionMessage($_LANG['ARTICLE_DELETED'], 'info'); cmsCore::redirectBack(); } else { // если удалили как администратор или редактор и мы не авторы статьи, отсылаем сообщение автору if (($is_editor || cmsCore::c('user')->is_admin) && $article['user_id'] != cmsCore::c('user')->id) { $link = '<a href="'.cmsCore::m('content')->getArticleURL(null, $article['seolink']).'">'.$article['title'].'</a>'; $message = str_replace('%link%', $link, ($article['published'] ? $_LANG['MSG_ARTICLE_DELETED'] : $_LANG['MSG_ARTICLE_REJECTED'])); cmsUser::sendMessage(USER_UPDATER, $article['user_id'], $message); } else { cmsCore::addSessionMessage($_LANG['ARTICLE_DELETED'], 'info'); } cmsCore::redirect(cmsCore::m('content')->getCategoryURL(null, $article['catseolink'])); } } } ///////////////////////////////////// MY ARTICLES /////////////////////////////////////////////////////////////////////////////////// if ($do == 'my'){ if (!cmsUser::isUserCan('content/add')) { cmsCore::error404(); } cmsCore::c('page')->setTitle($_LANG['MY_ARTICLES']); cmsCore::c('page')->addPathway($_LANG['USERS'], '/'.str_replace('/', '', cmsUser::PROFILE_LINK_PREFIX)); cmsCore::c('page')->addPathway(cmsCore::c('user')->nickname, cmsUser::getProfileURL(cmsCore::c('user')->login)); cmsCore::c('page')->addPathway($_LANG['MY_ARTICLES']); $perpage = 15; // Условия cmsCore::m('content')->whereUserIs(cmsCore::c('user')->id); // Общее количество статей $total = cmsCore::m('content')->getArticlesCount(false); // Сортировка и разбивка на страницы cmsCore::c('db')->orderBy('con.pubdate', 'DESC'); cmsCore::c('db')->limitPage($page, $perpage); // Получаем статьи $content_list = $total ? cmsCore::m('content')->getArticlesList(false) : array(); cmsCore::c('db')->resetConditions(); cmsPage::initTemplate('components', 'com_content_my')-> assign('articles', $content_list)-> assign('total', $total)-> assign('user_can_delete', cmsUser::isUserCan('content/delete'))-> assign('pagebar', cmsPage::getPagebar($total, $page, $perpage, '/content/my%page%.html'))-> display(); } ///////////////////////////////////// BEST ARTICLES /////////////////////////////////////////////////////////////////////////////////// if ($do == 'best') { cmsCore::c('page')->setTitle($_LANG['ARTICLES_RATING']); cmsCore::c('page')->addPathway($_LANG['ARTICLES_RATING']); // Только статьи, за которые можно голосовать cmsCore::c('db')->where("con.canrate = 1"); // Сортировка и разбивка на страницы cmsCore::c('db')->orderBy('con.rating', 'DESC'); cmsCore::c('db')->limitPage(1, 30); // Получаем статьи $content_list = cmsCore::m('content')->getArticlesList(); cmsPage::initTemplate('components', 'com_content_rating')-> assign('articles', $content_list)-> display(); } }
/** * Возвращает категории, доступные для публикования в них * @return array */ public function getPublicCats() { $inCore = cmsCore::getInstance(); $nested_sets = $inCore->nestedSetsInit('cms_category'); $rootid = cmsCore::c('db')->getNsRootCatId('cms_category'); $rs_rows = $nested_sets->SelectSubNodes($rootid); if ($rs_rows) { while ($node = cmsCore::c('db')->fetch_assoc($rs_rows)) { if (cmsCore::c('user')->is_admin || (cmsCore::checkUserAccess('afisha_category', $node['id']) && ($node['is_public'] || ($node['modgrp_id'] && $node['modgrp_id'] == cmsCore::c('user')->group_id && cmsUser::isUserCan('content/autoadd'))))) { $subcats[] = $node; } } } $subcats = cmsCore::callEvent('GET_CONTENT_PUBCATS', $subcats); return $subcats; }
public function generateMap() { $gen_map = parent::generateMap(); if ($gen_map === false) { return; } $today = date('Y-m-d H:i:s'); $is_end = false; // Заносим в карту категории $results = cmsCore::c('db')->query("SELECT * FROM cms_category WHERE parent_id != 0 AND NSDiffer = '' AND published = 1"); if (cmsCore::c('db')->num_rows($results)) { while ($cat = cmsCore::c('db')->fetch_assoc($results)) { if (!cmsCore::checkUserAccess('category', $cat['id'])) { continue; } $last_date = cmsCore::c('db')->get_field('cms_content', "category_id='". $cat['id'] ."' ORDER BY pubdate DESC", 'pubdate'); $last_date = explode(' ', !empty($last_date) ? $last_date : $cat['pubdate']); $this->writeMapItem(array( 'loc' => cmsCore::c('config')->host .'/'. (cmsCore::c('config')->com_without_name_in_url != 'content' ? 'content/' : '') . $cat['seolink'], 'changefreq' => 'daily', 'priority' => '0.8', 'lastmod' => $last_date[0] )); } } $article_nums = 0; // Заносим в карту статьи while($is_end === false) { $results = cmsCore::c('db')->query("SELECT id, seolink, pubdate FROM cms_content WHERE published = 1 AND pubdate <= '". $today ."' ORDER BY pubdate ASC LIMIT ". $article_nums .', 1000'); if (cmsCore::c('db')->num_rows($results)) { while ($article = cmsCore::c('db')->fetch_assoc($results)) { if (cmsCore::checkUserAccess('material', $article['id'])) { $last_date = explode(' ', $article['pubdate']); $this->writeMapItem(array( 'loc' => cmsCore::c('config')->host .'/'. (cmsCore::c('config')->com_without_name_in_url != 'content' ? 'content/' : '') . $article['seolink'] .'.html', 'changefreq' => 'weekly', 'priority' => '0.7', 'lastmod' => $last_date[0] )); } $article_nums++; } } else { $is_end = true; } } $this->closeFile(); }
public function generateMap() { $gen_map = parent::generateMap(); if ($gen_map === false) { return false; } else { $this->gOpenFile(); } $is_end = false; $access_cats = array(); // Заносим в карту категории $results = cmsCore::c('db')->query("SELECT * FROM cms_video_category WHERE parent_id != 0 AND published = 1 ORDER BY id ASC"); if (cmsCore::c('db')->num_rows($results)) { while ($cat = cmsCore::c('db')->fetch_assoc($results)) { if (!cmsCore::checkUserAccess('video', $cat['id'])) { $access_cats[] = $cat['id']; continue; } $last_date = cmsCore::c('db')->get_field('cms_video_movie', "cat_id='". $cat['id'] ."' ORDER BY pubdate DESC", 'pubdate'); $last_date = explode(' ', !empty($last_date) ? $last_date : $cat['pubdate']); $this->writeMapItem(array( 'target' => 'video-cat', 'loc' => HOST .'/video/'. ($this->cfg['is_seo_url'] ? $cat['seolink'] : $cat['id']), 'changefreq' => 'daily', 'priority' => '0.8', 'lastmod' => $last_date[0] )); } } // Заносим в карту рубрики $results = cmsCore::c('db')->query("SELECT * FROM cms_video_rubric WHERE published = 1 ORDER BY id ASC"); if (cmsCore::c('db')->num_rows($results)) { while ($cat = cmsCore::c('db')->fetch_assoc($results)) { $last_date = cmsCore::c('db')->get_field('cms_video_movie', "rubric_id='". $cat['id'] ."' ORDER BY pubdate DESC", 'pubdate'); $last_date = explode(' ', !empty($last_date) ? $last_date : $cat['pubdate']); $this->writeMapItem(array( 'target' => 'video-rubric', 'loc' => HOST .'/video/rubrics/'. ($this->cfg['is_seo_url'] ? $cat['seolink'] : 'view'. $cat['id']) .'.html', 'changefreq' => 'daily', 'priority' => '0.8', 'lastmod' => $last_date[0] )); } } $item_nums = 0; // Заносим в карту видео материалы while($is_end === false) { $results = cmsCore::c('db')->query("SELECT m.*, cat.title as cat_title, cat.seolink as cat_seolink FROM cms_video_movie m INNER JOIN cms_video_category cat ON cat.id=m.cat_id WHERE m.published=1 AND cat.published=1 ORDER BY id ASC LIMIT ". $item_nums .', 1000'); if (cmsCore::c('db')->num_rows($results)) { while ($item = cmsCore::c('db')->fetch_assoc($results)) { if (in_array($cat['id'], $access_cats)) { continue; } if ($this->cfg['is_seo_url']) { if ($this->cfg['short_seo_url']) { $item['seolink'] = $item['seolink']; } else { $item['seolink'] = $item['cat_seolink'] .'/'. $item['seolink']; } } else { $item['seolink'] = 'movie'. $item['id']; } $last_date = explode(' ', $item['pubdate']); $item['loc'] = HOST .'/video/'. $item['seolink'] .'.html'; $item['changefreq'] = 'weekly'; $item['priority'] = '0.7'; $item['lastmod'] = $last_date[0]; $item['cat_link'] = HOST .'/video/'. ($this->cfg['is_seo_url'] ? $item['cat_seolink'] : $item['cat_id']); $this->writeMapItem($item); $item_nums++; } } else { $is_end = true; } } $this->closeFile(); }