function search_blogs($query, $look) { $inDB = cmsDatabase::getInstance(); $searchModel = cms_model_search::initModel(); global $_LANG; $sql = "SELECT con.*, cat.title cat_title, cat.id cat_id, cat.owner owner, cat.user_id user_id, cat.seolink as bloglink\n\t\t\tFROM cms_blog_posts con\n\t\t\tINNER JOIN cms_blogs cat ON cat.id = con.blog_id AND cat.allow_who = 'all' AND cat.owner = 'user'\n\t\t\tWHERE MATCH(con.title, con.content) AGAINST ('{$query}' IN BOOLEAN MODE) AND con.published = 1 LIMIT 100"; $result = $inDB->query($sql); if ($inDB->num_rows($result)) { cmsCore::loadLanguage('components/blogs'); cmsCore::loadModel('blogs'); $model = new cms_model_blogs(); while ($item = $inDB->fetch_assoc($result)) { $result_array = array(); $result_array['link'] = $model->getPostURL($item['bloglink'], $item['seolink']); $result_array['place'] = $_LANG['BLOG'] . ' «' . $item['cat_title'] . '»'; $result_array['placelink'] = $model->getBlogURL($item['bloglink']); $result_array['description'] = $searchModel->getProposalWithSearchWord($item['content_html']); $result_array['title'] = $item['title']; $result_array['pubdate'] = $item['pubdate']; $result_array['session_id'] = session_id(); $searchModel->addResult($result_array); } } return; }
function rss_blogs($item_id, $cfg) { if (!cmsCore::getInstance()->isComponentEnable('blogs')) { return false; } $inDB = cmsDatabase::getInstance(); global $_LANG; cmsCore::loadModel('blogs'); $model = new cms_model_blogs(); cmsCore::loadClass('blog'); $inBlog = cmsBlogs::getInstance(); $inBlog->owner = 'user'; $channel = array(); $items = array(); // Формируем канал if ($item_id) { $blog = $inBlog->getBlog($item_id); if (!$blog) { return false; } //Если доступа к блогу нет, возвращаемся if (!cmsUser::checkUserContentAccess($blog['allow_who'], $blog['user_id'])) { return false; } $inBlog->whereBlogIs($blog['id']); $channel['title'] = $blog['title']; $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS']; $channel['link'] = HOST . $model->getBlogURL($blog['seolink']); } else { $channel['title'] = $_LANG['NEW_POSTS_IN_BLOGS']; $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS']; $channel['link'] = HOST .'/blogs'; } // В RSS всегда только публичные посты $inBlog->whereOnlyPublic(); $inDB->orderBy('p.pubdate', 'DESC'); $inDB->limit($cfg['maxitems']); $posts = $inBlog->getPosts(false, $model, true); if ($posts) { foreach($posts as $post){ $post['link'] = HOST . $post['url']; $post['description'] = mb_substr(strip_tags($post['content_html']), 0, 350). '...'; $post['comments'] = $post['link'].'#c'; $post['category'] = $post['blog_title']; $items[] = $post; } } return array('channel' => $channel, 'items' => $items); }
function blogs() { $inCore = cmsCore::getInstance(); $inPage = cmsPage::getInstance(); $inDB = cmsDatabase::getInstance(); $inUser = cmsUser::getInstance(); cmsCore::loadClass('blog'); $inBlog = cmsBlogs::getInstance(); $inBlog->owner = 'user'; global $_LANG; $model = new cms_model_blogs(); define('IS_BILLING', $inCore->isComponentInstalled('billing')); if (IS_BILLING) { cmsCore::loadClass('billing'); } //Получаем параметры $id = cmsCore::request('id', 'int', 0); $post_id = cmsCore::request('post_id', 'int', 0); $bloglink = cmsCore::request('bloglink', 'str', ''); $seolink = cmsCore::request('seolink', 'str', ''); $do = $inCore->do; $page = cmsCore::request('page', 'int', 1); $cat_id = cmsCore::request('cat_id', 'int', 0); $ownertype = cmsCore::request('ownertype', 'str', ''); $on_moderate = cmsCore::request('on_moderate', 'int', 0); $pagetitle = $inCore->getComponentTitle(); $inPage->addPathway($pagetitle, '/blogs'); $inPage->setTitle($pagetitle); $inPage->setDescription($model->config['meta_desc'] ? $model->config['meta_desc'] : $pagetitle); $inPage->setKeywords($model->config['meta_keys'] ? $model->config['meta_keys'] : $pagetitle); $inPage->addHeadJsLang(array('CONFIG_BLOG', 'DEL_BLOG', 'YOU_REALY_DELETE_BLOG', 'NEW_CAT', 'RENAME_CAT', 'YOU_REALY_DELETE_CAT', 'YOU_REALY_DELETE_POST', 'NO_PUBLISHED')); ///////////////////////// МОЙ БЛОГ ///////////////////////////////////////////// if ($do == 'my_blog') { if (!$inUser->id) { cmsCore::error404(); } $my_blog = $inBlog->getBlogByUserId($inUser->id); if (!$my_blog) { cmsCore::redirect('/blogs/createblog.html'); } else { cmsCore::redirect($model->getBlogURL($my_blog['seolink'])); } } ///////////////////////// ПОСЛЕДНИЕ ПОСТЫ ////////////////////////////////////// if ($do == 'view') { $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="' . $_LANG['RSS_BLOGS'] . '" href="' . HOST . '/rss/blogs/all/feed.rss">'); // кроме админов в списке только с доступом для всех if (!$inUser->is_admin) { $inBlog->whereOnlyPublic(); } // ограничиваем по рейтингу если надо if ($model->config['list_min_rating']) { $inBlog->ratingGreaterThan($model->config['list_min_rating']); } // всего постов $total = $inBlog->getPostsCount($inUser->is_admin); //устанавливаем сортировку $inDB->orderBy('p.pubdate', 'DESC'); $inDB->limitPage($page, $model->config['perpage']); // сами посты $posts = $inBlog->getPosts($inUser->is_admin, $model); if (!$posts && $page > 1) { cmsCore::error404(); } cmsPage::initTemplate('components', 'com_blog_view_posts')->assign('pagetitle', $pagetitle)->assign('ownertype', $ownertype)->assign('total', $total)->assign('posts', $posts)->assign('pagination', cmsPage::getPagebar($total, $page, $model->config['perpage'], '/blogs/latest-%page%.html'))->assign('cfg', $model->config)->display('com_blog_view_posts.tpl'); } ////////// СОЗДАНИЕ БЛОГА ////////////////////////////////////////////////////// if ($do == 'create') { //Проверяем авторизацию if (!$inUser->id) { cmsUser::goToLogin(); } //Если у пользователя уже есть блог, то выходим if ($inBlog->getUserBlogId($inUser->id)) { cmsCore::redirectBack(); } $inPage->addPathway($_LANG['PATH_CREATING_BLOG']); $inPage->setTitle($_LANG['CREATE_BLOG']); if (IS_BILLING) { cmsBilling::checkBalance('blogs', 'add_blog'); } //Показ формы создания блога if (!cmsCore::inRequest('goadd')) { cmsPage::initTemplate('components', 'com_blog_create')->assign('is_restrictions', !$inUser->is_admin && $model->config['min_karma'])->assign('cfg', $model->config)->display('com_blog_create.tpl'); } //Сам процесс создания блога if (cmsCore::inRequest('goadd')) { $title = cmsCore::request('title', 'str'); $allow_who = cmsCore::request('allow_who', 'str', 'all'); $ownertype = cmsCore::request('ownertype', 'str', 'single'); //Проверяем название if (mb_strlen($title) < 5) { cmsCore::addSessionMessage($_LANG['BLOG_ERR_TITLE'], 'error'); cmsCore::redirect('/blogs/createblog.html'); } //Проверяем хватает ли кармы, но только если это не админ if ($model->config['min_karma'] && !$inUser->is_admin) { // если персональный блог if ($ownertype == 'single' && $inUser->karma < $model->config['min_karma_private']) { cmsCore::addSessionMessage($_LANG['BLOG_YOU_NEED'] . ' <a href="/users/' . $inUser->id . '/karma.html">' . $_LANG['BLOG_KARMS'] . '</a> ' . $_LANG['FOR_CREATE_PERSON_BLOG'] . ' — ' . $model->config['min_karma_private'] . ', ' . $_LANG['BLOG_HEAVING'] . ' — ' . $inUser->karma, 'error'); cmsCore::redirect('/blogs/createblog.html'); } // если коллективный блог if ($ownertype == 'multi' && $inUser->karma < $model->config['min_karma_public']) { cmsCore::addSessionMessage($_LANG['BLOG_YOU_NEED'] . ' <a href="/users/' . $inUser->id . '/karma.html">' . $_LANG['BLOG_KARMS'] . '</a> ' . $_LANG['FOR_CREATE_TEAM_BLOG'] . ' — ' . $model->config['min_karma_public'] . ', ' . $_LANG['BLOG_HEAVING'] . ' — ' . $inUser->karma, 'error'); cmsCore::redirect('/blogs/createblog.html'); } } //Добавляем блог в базу $blog_id = $inBlog->addBlog(array('user_id' => $inUser->id, 'title' => $title, 'allow_who' => $allow_who, 'ownertype' => $ownertype, 'forall' => 1)); $blog_link = $inDB->get_field('cms_blogs', "id='{$blog_id}'", 'seolink'); //регистрируем событие cmsActions::log('add_blog', array('object' => $title, 'object_url' => $model->getBlogURL($blog_link), 'object_id' => $blog_id, 'target' => '', 'target_url' => '', 'target_id' => 0, 'description' => '')); if (IS_BILLING) { cmsBilling::process('blogs', 'add_blog'); } cmsCore::addSessionMessage($_LANG['BLOG_CREATED_TEXT'], 'info'); cmsCore::redirect($model->getBlogURL($blog_link)); } } ////////// НАСТРОЙКИ БЛОГА ///////////////////////////////////////////////////// if ($do == 'config') { if (!$inUser->id) { cmsCore::error404(); } if (!cmsCore::isAjax()) { cmsCore::error404(); } // получаем блог $blog = $inBlog->getBlog($id); if (!$blog) { cmsCore::error404(); } //Проверяем является пользователь хозяином блога или админом if ($blog['user_id'] != $inUser->id && !$inUser->is_admin) { cmsCore::halt(); } //Если нет запроса на сохранение, показываем форму настроек блога if (!cmsCore::inRequest('goadd')) { //Получаем список авторов блога $authors = $inBlog->getBlogAuthors($blog['id']); cmsPage::initTemplate('components', 'com_blog_config')->assign('blog', $blog)->assign('form_action', '/blogs/' . $blog['id'] . '/editblog.html')->assign('authors_list', cmsUser::getAuthorsList($authors))->assign('users_list', cmsUser::getUsersList(false, $authors))->assign('is_restrictions', !$inUser->is_admin && $model->config['min_karma'])->assign('cfg', $model->config)->assign('is_admin', $inUser->is_admin)->display('com_blog_config.tpl'); cmsCore::jsonOutput(array('error' => false, 'html' => ob_get_clean())); } //Если пришел запрос на сохранение if (cmsCore::inRequest('goadd')) { //Получаем настройки $title = cmsCore::request('title', 'str'); $allow_who = cmsCore::request('allow_who', 'str', 'all'); $ownertype = cmsCore::request('ownertype', 'str', 'single'); $premod = cmsCore::request('premod', 'int', 0); $forall = cmsCore::request('forall', 'int', 1); $showcats = cmsCore::request('showcats', 'int', 1); $authors = cmsCore::request('authorslist', 'array_int', array()); if ($model->config['seo_user_access'] || $inUser->is_admin) { $page_title = cmsCore::request('pagetitle', 'str', ''); $meta_keys = cmsCore::request('meta_keys', 'str', ''); $meta_desc = cmsCore::request('meta_desc', 'str', ''); } else { $page_title = $meta_keys = $meta_desc = ''; } //Проверяем настройки if (mb_strlen($title) < 5) { $title = $blog['title']; } //Проверяем ограничения по карме (для смены типа блога) if ($model->config['min_karma'] && !$inUser->is_admin) { // если персональный блог if ($ownertype == 'single' && $inUser->karma < $model->config['min_karma_private']) { cmsCore::jsonOutput(array('error' => true, 'text' => $_LANG['BLOG_YOU_NEED'] . ' <a href="/users/' . $inUser->id . '/karma.html">' . $_LANG['BLOG_KARMS'] . '</a> ' . $_LANG['FOR_CREATE_PERSON_BLOG'] . ' — ' . $model->config['min_karma_private'] . ', ' . $_LANG['BLOG_HEAVING'] . ' — ' . $inUser->karma)); } // если коллективный блог if ($ownertype == 'multi' && $inUser->karma < $model->config['min_karma_public']) { cmsCore::jsonOutput(array('error' => true, 'text' => $_LANG['BLOG_YOU_NEED'] . ' <a href="/users/' . $inUser->id . '/karma.html">' . $_LANG['BLOG_KARMS'] . '</a> ' . $_LANG['FOR_CREATE_TEAM_BLOG'] . ' — ' . $model->config['min_karma_public'] . ', ' . $_LANG['BLOG_HEAVING'] . ' — ' . $inUser->karma)); } } if (!cmsUser::checkCsrfToken()) { cmsCore::halt(); } //сохраняем авторов $inBlog->updateBlogAuthors($blog['id'], $authors); //сохраняем настройки блога $blog['seolink_new'] = $inBlog->updateBlog($blog['id'], array('title' => $title, 'pagetitle' => $page_title, 'meta_keys' => $meta_keys, 'meta_desc' => $meta_desc, 'allow_who' => $allow_who, 'showcats' => $showcats, 'ownertype' => $ownertype, 'premod' => $premod, 'forall' => $forall), $model->config['update_seo_link_blog']); $blog['seolink'] = $blog['seolink_new'] ? $blog['seolink_new'] : $blog['seolink']; if (stripslashes($title) != $blog['title']) { // обновляем записи постов cmsActions::updateLog('add_post', array('target' => $title, 'target_url' => $model->getBlogURL($blog['seolink'])), 0, $blog['id']); // обновляем запись добавления блога cmsActions::updateLog('add_blog', array('object' => $title, 'object_url' => $model->getBlogURL($blog['seolink'])), $blog['id']); } cmsCore::jsonOutput(array('error' => false, 'redirect' => $model->getBlogURL($blog['seolink']))); } } ////////// СПИСОК БЛОГОВ /////////////////////////////////////////////////////// if ($do == 'view_blogs') { // rss в адресной строке $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="' . $_LANG['BLOGS'] . '" href="' . HOST . '/rss/blogs/all/feed.rss">'); // тип блога if ($ownertype && $ownertype != 'all') { $inBlog->whereOwnerTypeIs($ownertype); } // всего блогов $total = $inBlog->getBlogsCount(); //устанавливаем сортировку $inDB->orderBy('b.rating', 'DESC'); $inDB->limitPage($page, $model->config['perpage_blog']); //Получаем список блогов $blogs = $inBlog->getBlogs($model); if (!$blogs && $page > 1) { cmsCore::error404(); } //Генерируем панель со страницами и устанавливаем заголовки страниц и глубиномера switch ($ownertype) { case 'all': $inPage->setTitle($_LANG['ALL_BLOGS']); $inPage->setDescription($_LANG['BLOGS'] . ' - ' . $_LANG['ALL_BLOGS']); $inPage->addPathway($_LANG['ALL_BLOGS']); $link = '/blogs/all-%page%.html'; break; case 'single': $inPage->setTitle($_LANG['PERSONALS']); $inPage->setDescription($_LANG['PERSONALS'] . ' ' . $_LANG['BLOGS']); $inPage->addPathway($_LANG['PERSONALS']); $link = '/blogs/single-%page%.html'; break; case 'multi': $inPage->setTitle($_LANG['COLLECTIVES']); $inPage->setDescription($_LANG['COLLECTIVES'] . ' ' . $_LANG['BLOGS']); $inPage->addPathway($_LANG['COLLECTIVES']); $link = '/blogs/multi-%page%.html'; break; } if ($blogs) { foreach ($blogs as $b) { $k[] = $b['title']; } $inPage->setKeywords(implode(', ', $k)); } cmsPage::initTemplate('components', 'com_blog_view_all')->assign('cfg', $model->config)->assign('total', $total)->assign('ownertype', $ownertype)->assign('blogs', $blogs)->assign('pagination', cmsPage::getPagebar($total, $page, $model->config['perpage_blog'], $link))->display('com_blog_view_all.tpl'); } ////////// ПРОСМОТР БЛОГА ////////////////////////////////////////////////////// if ($do == 'blog') { // получаем блог $blog = $inBlog->getBlog($bloglink); // Совместимость со старыми ссылками на клубные блоги // Пробуем клубный блог получить по ссылке if (!$blog) { $blog_user_id = $inDB->get_field('cms_blogs', "seolink = '{$bloglink}' AND owner = 'club'", 'user_id'); if ($blog_user_id) { cmsCore::redirect('/clubs/' . $blog_user_id . '_blog', '301'); } } if (!$blog) { cmsCore::error404(); } // Права доступа $myblog = $inUser->id && $inUser->id == $blog['user_id']; // автор блога $is_writer = $inBlog->isUserBlogWriter($blog, $inUser->id); // может ли пользователь писать в блог $inPage->addPathway($blog['title'], $model->getBlogURL($blog['seolink'])); // rss в адресной строке $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="' . htmlspecialchars(strip_tags($blog['title'])) . '" href="' . HOST . '/rss/blogs/' . $blog['id'] . '/feed.rss">'); if ($myblog || $inUser->is_admin) { $inPage->addHeadJS('components/blogs/js/blog.js'); } //Если доступа нет, возвращаемся и выводим сообщение об ошибке if (!cmsUser::checkUserContentAccess($blog['allow_who'], $blog['user_id'])) { cmsCore::addSessionMessage($_LANG['CLOSED_BLOG'] . '<br>' . $_LANG['CLOSED_BLOG_TEXT'], 'error'); cmsCore::redirect('/blogs'); } // Если показываем посты на модерации, если запрашиваем их if ($on_moderate) { if (!$inUser->is_admin && !($myblog && $blog['ownertype'] == 'multi' && $blog['premod'])) { cmsCore::error404(); } $inBlog->whereNotPublished(); $inPage->setTitle($_LANG['POSTS_ON_MODERATE']); $inPage->addPathway($_LANG['POSTS_ON_MODERATE']); $blog['title'] .= ' - ' . $_LANG['POSTS_ON_MODERATE']; } //Получаем html-код ссылки на автора с иконкой его пола $blog['author'] = cmsUser::getGenderLink($blog['user_id']); // посты данного блога $inBlog->whereBlogIs($blog['id']); // кроме админов автора в списке только с доступом для всех if (!$inUser->is_admin && !$myblog && !$inUser->isFriend($blog['user_id'])) { $inBlog->whereOnlyPublic(); } // если пришла категория if ($cat_id) { $all_total = $inBlog->getPostsCount($inUser->is_admin || $myblog); $inBlog->whereCatIs($cat_id); } // всего постов $total = $inBlog->getPostsCount($inUser->is_admin || $myblog); //устанавливаем сортировку $inDB->orderBy('p.pubdate', 'DESC'); $inDB->limitPage($page, $model->config['perpage']); // сами посты $posts = $inBlog->getPosts($inUser->is_admin || $myblog, $model); if (!$posts && $page > 1) { cmsCore::error404(); } //Если нужно, получаем список рубрик (категорий) этого блога $blogcats = $blog['showcats'] ? $inBlog->getBlogCats($blog['id']) : false; //Считаем количество постов, ожидающих модерации $on_moderate = ($inUser->is_admin || $myblog) && !$on_moderate ? $inBlog->getModerationCount($blog['id']) : false; // админлинки $blog['moderate_link'] = $model->getBlogURL($blog['seolink']) . '/moderate.html'; $blog['blog_link'] = $model->getBlogURL($blog['seolink']); $blog['add_post_link'] = '/blogs/' . $blog['id'] . '/newpost' . ($cat_id ? $cat_id : '') . '.html'; //Генерируем панель со страницами if ($cat_id) { $pagination = cmsPage::getPagebar($total, $page, $model->config['perpage'], $blog['blog_link'] . '/page-%page%/cat-' . $cat_id); } else { $pagination = cmsPage::getPagebar($total, $page, $model->config['perpage'], $blog['blog_link'] . '/page-%page%'); } // SEO $inPage->setTitle($blog['pagetitle'] ? $blog['pagetitle'] : $blog['title']); $inPage->setDescription($blog['meta_desc'] ? $blog['meta_desc'] : $blog['title']); // keywords if ($blog['meta_keys']) { $meta_keys = $blog['meta_keys']; } elseif ($posts) { foreach ($posts as $p) { $k[] = $p['title']; } $meta_keys = implode(', ', $k); } else { $meta_keys = $blog['title']; } $inPage->setKeywords($meta_keys); cmsPage::initTemplate('components', 'com_blog_view')->assign('myblog', $myblog)->assign('is_config', true)->assign('is_admin', $inUser->is_admin)->assign('is_writer', $is_writer)->assign('on_moderate', $on_moderate)->assign('cat_id', $cat_id)->assign('blogcats', $blogcats)->assign('total', $total)->assign('all_total', isset($all_total) ? $all_total : 0)->assign('blog', $blog)->assign('posts', $posts)->assign('pagination', $pagination)->display('com_blog_view.tpl'); } ////////// НОВЫЙ ПОСТ / РЕДАКТИРОВАНИЕ ПОСТА /////////////////////////////////// if ($do == 'newpost' || $do == 'editpost') { if (!$inUser->id) { cmsUser::goToLogin(); } // для редактирования сначала получаем пост if ($do == 'editpost') { $post = $inBlog->getPost($post_id); if (!$post) { cmsCore::error404(); } $id = $post['blog_id']; $post['tags'] = cmsTagLine('blogpost', $post['id'], false); } // получаем блог $blog = $inBlog->getBlog($id); if (!$blog) { cmsCore::error404(); } //Если доступа нет, возвращаемся и выводим сообщение об ошибке if (!cmsUser::checkUserContentAccess($blog['allow_who'], $blog['user_id'])) { cmsCore::addSessionMessage($_LANG['CLOSED_BLOG'] . '<br>' . $_LANG['CLOSED_BLOG_TEXT'], 'error'); cmsCore::redirect('/blogs'); } // Права доступа $myblog = $inUser->id && $inUser->id == $blog['user_id']; // автор блога $is_writer = $inBlog->isUserBlogWriter($blog, $inUser->id); // может ли пользователь писать в блог // если не его блог, пользователь не писатель и не админ, вне зависимости от авторства показываем 404 if (!$myblog && !$is_writer && !$inUser->is_admin) { cmsCore::error404(); } // проверяем является ли пользователь автором, если редактируем пост if ($do == 'editpost' && !$inUser->is_admin && $post['user_id'] != $inUser->id) { cmsCore::error404(); } //Если еще не было запроса на сохранение if (!cmsCore::inRequest('goadd')) { $inPage->addPathway($blog['title'], $model->getBlogURL($blog['seolink'])); //для нового поста if ($do == 'newpost') { if (IS_BILLING) { cmsBilling::checkBalance('blogs', 'add_post'); } $inPage->addPathway($_LANG['NEW_POST']); $inPage->setTitle($_LANG['NEW_POST']); $post = cmsUser::sessionGet('mod'); if ($post) { cmsUser::sessionDel('mod'); } else { $post['cat_id'] = $cat_id; $post['comments'] = 1; } } //для редактирования поста if ($do == 'editpost') { $inPage->addPathway($post['title'], $model->getPostURL($blog['seolink'], $post['seolink'])); $inPage->addPathway($_LANG['EDIT_POST']); $inPage->setTitle($_LANG['EDIT_POST']); } $inPage->initAutocomplete(); $autocomplete_js = $inPage->getAutocompleteJS('tagsearch', 'tags'); //получаем рубрики блога $cat_list = cmsCore::getListItems('cms_blog_cats', $post['cat_id'], 'id', 'ASC', "blog_id = '{$blog['id']}'"); //получаем код панелей bbcode и смайлов $bb_toolbar = cmsPage::getBBCodeToolbar('message', $model->config['img_on'], 'blogs', 'blog_post', $post_id); $smilies = cmsPage::getSmilesPanel('message'); $inCore->initAutoGrowText('#message'); //показываем форму cmsPage::initTemplate('components', 'com_blog_edit_post')->assign('blog', $blog)->assign('pagetitle', $do == 'editpost' ? $_LANG['EDIT_POST'] : $_LANG['NEW_POST'])->assign('mod', $post)->assign('cat_list', $cat_list)->assign('bb_toolbar', $bb_toolbar)->assign('smilies', $smilies)->assign('is_admin', $inUser->is_admin)->assign('cfg', $model->config)->assign('myblog', $myblog)->assign('user_can_iscomments', cmsUser::isUserCan('comments/iscomments'))->assign('autocomplete_js', $autocomplete_js)->display('com_blog_edit_post.tpl'); } //Если есть запрос на сохранение if (cmsCore::inRequest('goadd')) { $errors = false; //Получаем параметры $mod['title'] = cmsCore::request('title', 'str'); $mod['content'] = cmsCore::request('content', 'html'); $mod['feel'] = cmsCore::request('feel', 'str', ''); $mod['music'] = cmsCore::request('music', 'str', ''); $mod['cat_id'] = cmsCore::request('cat_id', 'int'); $mod['allow_who'] = cmsCore::request('allow_who', 'str', $blog['allow_who']); $mod['tags'] = cmsCore::request('tags', 'str', ''); $mod['comments'] = cmsCore::request('comments', 'int', 1); if ($model->config['seo_user_access'] || $inUser->is_admin) { $mod['pagetitle'] = cmsCore::request('pagetitle', 'str', ''); $mod['meta_keys'] = cmsCore::request('meta_keys', 'str', ''); $mod['meta_desc'] = cmsCore::request('meta_desc', 'str', ''); } $mod['published'] = $myblog || !$blog['premod'] ? 1 : 0; $mod['blog_id'] = $blog['id']; //Проверяем их if (mb_strlen($mod['title']) < 2) { cmsCore::addSessionMessage($_LANG['POST_ERR_TITLE'], 'error'); $errors = true; } if (mb_strlen($mod['content']) < 5) { cmsCore::addSessionMessage($_LANG['POST_ERR_TEXT'], 'error'); $errors = true; } // Если есть ошибки, возвращаемся назад if ($errors) { cmsUser::sessionPut('mod', $mod); cmsCore::redirectBack(); } //Если нет ошибок //добавляем новый пост... if ($do == 'newpost') { if (IS_BILLING) { cmsBilling::process('blogs', 'add_post'); } $mod['pubdate'] = date('Y-m-d H:i:s'); $mod['user_id'] = $inUser->id; // добавляем пост, получая его id и seolink $added = $inBlog->addPost($mod); $mod = array_merge($mod, $added); if ($mod['published']) { $mod['seolink'] = $model->getPostURL($blog['seolink'], $mod['seolink']); if ($blog['allow_who'] != 'nobody' && $mod['allow_who'] != 'nobody') { cmsCore::callEvent('ADD_POST_DONE', $mod); cmsActions::log('add_post', array('object' => $mod['title'], 'object_url' => $mod['seolink'], 'object_id' => $mod['id'], 'target' => $blog['title'], 'target_url' => $model->getBlogURL($blog['seolink']), 'target_id' => $blog['id'], 'description' => '', 'is_friends_only' => (int) ($blog['allow_who'] == 'friends' || $mod['allow_who'] == 'friends'))); } cmsCore::addSessionMessage($_LANG['POST_CREATED'], 'success'); cmsCore::redirect($mod['seolink']); } if (!$mod['published']) { $message = str_replace('%user%', cmsUser::getProfileLink($inUser->login, $inUser->nickname), $_LANG['MSG_POST_SUBMIT']); $message = str_replace('%post%', '<a href="' . $model->getPostURL($blog['seolink'], $added['seolink']) . '">' . $mod['title'] . '</a>', $message); $message = str_replace('%blog%', '<a href="' . $model->getBlogURL($blog['seolink']) . '">' . $blog['title'] . '</a>', $message); cmsUser::sendMessage(USER_UPDATER, $blog['user_id'], $message); cmsCore::addSessionMessage($_LANG['POST_PREMODER_TEXT'], 'info'); cmsCore::redirect($model->getBlogURL($blog['seolink'])); } } //...или сохраняем пост после редактирования if ($do == 'editpost') { if ($model->config['update_date']) { $mod['pubdate'] = date('Y-m-d H:i:s'); } $mod['edit_times'] = (int) $post['edit_times'] + 1; $new_post_seolink = $inBlog->updatePost($post['id'], $mod, $model->config['update_seo_link']); $post['seolink'] = is_string($new_post_seolink) ? $new_post_seolink : $post['seolink']; cmsActions::updateLog('add_post', array('object' => $mod['title'], 'pubdate' => $model->config['update_date'] ? $mod['pubdate'] : $post['pubdate'], 'object_url' => $model->getPostURL($blog['seolink'], $post['seolink'])), $post['id']); if (!$mod['published']) { $message = str_replace('%user%', cmsUser::getProfileLink($inUser->login, $inUser->nickname), $_LANG['MSG_POST_UPDATE']); $message = str_replace('%post%', '<a href="' . $model->getPostURL($blog['seolink'], $post['seolink']) . '">' . $mod['title'] . '</a>', $message); $message = str_replace('%blog%', '<a href="' . $model->getBlogURL($blog['seolink']) . '">' . $blog['title'] . '</a>', $message); cmsUser::sendMessage(USER_UPDATER, $blog['user_id'], $message); cmsCore::addSessionMessage($_LANG['POST_PREMODER_TEXT'], 'info'); } else { cmsCore::addSessionMessage($_LANG['POST_UPDATED'], 'success'); } cmsCore::redirect($model->getPostURL($blog['seolink'], $post['seolink'])); } } } ////////// НОВАЯ РУБРИКА / РЕДАКТИРОВАНИЕ РУБРИКИ ////////////////////////////// if ($do == 'newcat' || $do == 'editcat') { if (!$inUser->id) { cmsCore::error404(); } if (!cmsCore::isAjax()) { cmsCore::error404(); } $cat = array(); // Для редактирования сначала получаем рубрику if ($do == 'editcat') { $cat = $inBlog->getBlogCategory($cat_id); if (!$cat) { cmsCore::halt(); } $id = $cat['blog_id']; } // получаем блог $blog = $inBlog->getBlog($id); if (!$blog) { cmsCore::halt(); } //Проверяем является пользователь хозяином блога или админом if ($blog['user_id'] != $inUser->id && !$inUser->is_admin) { cmsCore::halt(); } //Если нет запроса на сохранение if (!cmsCore::inRequest('goadd')) { cmsPage::initTemplate('components', 'com_blog_edit_cat')->assign('mod', $cat)->assign('form_action', $do == 'newcat' ? '/blogs/' . $blog['id'] . '/newcat.html' : '/blogs/editcat' . $cat['id'] . '.html')->display('com_blog_edit_cat.tpl'); cmsCore::jsonOutput(array('error' => false, 'html' => ob_get_clean())); } //Если есть запрос на сохранение if (cmsCore::inRequest('goadd')) { $new_cat['title'] = cmsCore::request('title', 'str', ''); $new_cat['description'] = cmsCore::request('description', 'str', ''); $new_cat['blog_id'] = $blog['id']; if (mb_strlen($new_cat['title']) < 3) { cmsCore::jsonOutput(array('error' => true, 'text' => $_LANG['CAT_ERR_TITLE'])); } if (!cmsUser::checkCsrfToken()) { cmsCore::halt(); } //новая рубрика if ($do == 'newcat') { $cat['id'] = $inBlog->addBlogCategory($new_cat); cmsCore::addSessionMessage($_LANG['CAT_IS_ADDED'], 'success'); } //редактирование рубрики if ($do == 'editcat') { $inBlog->updateBlogCategory($cat['id'], $new_cat); cmsCore::addSessionMessage($_LANG['CAT_IS_UPDATED'], 'success'); } cmsCore::jsonOutput(array('error' => false, 'redirect' => $model->getBlogURL($blog['seolink'], 1, $cat['id']))); } } ///////////////////////// УДАЛЕНИЕ РУБРИКИ ///////////////////////////////////// if ($do == 'delcat') { if (!$inUser->id) { cmsCore::error404(); } if (!cmsCore::isAjax()) { cmsCore::error404(); } $cat = $inBlog->getBlogCategory($cat_id); if (!$cat) { cmsCore::halt(); } $blog = $inBlog->getBlog($cat['blog_id']); if (!$blog) { cmsCore::halt(); } if ($blog['user_id'] != $inUser->id && !$inUser->is_admin) { cmsCore::halt(); } if (!cmsUser::checkCsrfToken()) { cmsCore::halt(); } $inBlog->deleteBlogCategory($cat['id']); cmsCore::addSessionMessage($_LANG['CAT_IS_DELETED'], 'success'); cmsCore::jsonOutput(array('error' => false, 'redirect' => $model->getBlogURL($blog['seolink']))); } ////////////////////////// ПРОСМОТР ПОСТА ////////////////////////////////////// if ($do == 'post') { $post = $inBlog->getPost($seolink); if (!$post) { cmsCore::error404(); } $blog = $inBlog->getBlog($post['blog_id']); // Совместимость со старыми ссылками на клубные посты блога if (!$blog) { $blog_user_id = $inDB->get_field('cms_blogs', "id = '{$post['blog_id']}' AND owner = 'club'", 'user_id'); if ($blog_user_id) { cmsCore::redirect('/clubs/' . $blog_user_id . '_' . $post['seolink'] . '.html', '301'); } } if (!$blog) { cmsCore::error404(); } // Проверяем сеолинк блога и делаем редирект если он изменился if ($bloglink != $blog['seolink']) { cmsCore::redirect($model->getPostURL($blog['seolink'], $post['seolink']), '301'); } // право просмотра блога if (!cmsUser::checkUserContentAccess($blog['allow_who'], $blog['user_id'])) { cmsCore::addSessionMessage($_LANG['CLOSED_BLOG'] . '<br>' . $_LANG['CLOSED_BLOG_TEXT'], 'error'); cmsCore::redirect('/blogs'); } // право просмотра самого поста if (!cmsUser::checkUserContentAccess($post['allow_who'], $post['user_id'])) { cmsCore::addSessionMessage($_LANG['CLOSED_POST'] . '<br>' . $_LANG['CLOSED_POST_TEXT'], 'error'); cmsCore::redirect($model->getBlogURL($blog['seolink'])); } if ($inUser->id) { $inPage->addHeadJS('components/blogs/js/blog.js'); } $inPage->addPathway($blog['title'], $model->getBlogURL($blog['seolink'])); $inPage->addPathway($post['title']); $inPage->setTitle($post['pagetitle'] ? $post['pagetitle'] : $post['title']); $inPage->setDescription($post['meta_desc'] ? $post['meta_desc'] : crop($post['content_html'])); $inPage->setKeywords($post['meta_keys'] ? $post['meta_keys'] : $post['title']); if ($post['cat_id']) { $cat = $inBlog->getBlogCategory($post['cat_id']); } $post['tags'] = cmsTagBar('blogpost', $post['id']); $is_author = $inUser->id && $inUser->id == $post['user_id']; // увеличиваем кол-во просмотров if (!$is_author) { $inDB->setFlag('cms_blog_posts', $post['id'], 'hits', $post['hits'] + 1); } cmsPage::initTemplate('components', 'com_blog_view_post')->assign('post', $post)->assign('blog', $blog)->assign('cat', $cat)->assign('is_author', $is_author)->assign('is_writer', $inBlog->isUserBlogWriter($blog, $inUser->id))->assign('myblog', $inUser->id && $inUser->id == $blog['user_id'])->assign('is_admin', $inUser->is_admin)->assign('karma_form', cmsKarmaForm('blogpost', $post['id'], $post['rating'], $is_author))->assign('navigation', $inBlog->getPostNavigation($post['id'], $blog['id'], $model, $blog['seolink']))->display('com_blog_view_post.tpl'); if ($inCore->isComponentInstalled('comments') && $post['comments']) { cmsCore::includeComments(); comments('blog', $post['id'], array(), $is_author); } } ///////////////////////// УДАЛЕНИЕ ПОСТА /////////////////////////////////////// if ($do == 'delpost') { if (!$inUser->id) { cmsCore::error404(); } if (!cmsCore::isAjax()) { cmsCore::error404(); } $post = $inBlog->getPost($post_id); if (!$post) { cmsCore::halt(); } $blog = $inBlog->getBlog($post['blog_id']); if (!$blog) { cmsCore::halt(); } $myblog = $inUser->id == $blog['user_id']; // автор блога $is_writer = $inBlog->isUserBlogWriter($blog, $inUser->id); // если не его блог, пользователь не писатель и не админ if (!$myblog && !$is_writer && !$inUser->is_admin) { cmsCore::halt(); } // проверяем является ли пользователь автором if (!$inUser->is_admin && !$myblog && $post['user_id'] != $inUser->id) { cmsCore::halt(); } if (!cmsUser::checkCsrfToken()) { cmsCore::halt(); } $inBlog->deletePost($post['id']); if ($inUser->id != $post['user_id']) { cmsUser::sendMessage(USER_UPDATER, $post['user_id'], $_LANG['YOUR_POST'] . ' <b>«' . $post['title'] . '»</b> ' . $_LANG['WAS_DELETED_FROM_BLOG'] . ' <b>«<a href="' . $model->getBlogURL($blog['seolink']) . '">' . $blog['title'] . '</a>»</b>'); } cmsCore::addSessionMessage($_LANG['POST_IS_DELETED'], 'success'); cmsCore::jsonOutput(array('error' => false, 'redirect' => $model->getBlogURL($blog['seolink']))); } ///////////////////////// ПУБЛИКАЦИЯ ПОСТА ///////////////////////////////////// if ($do == 'publishpost') { if (!$inUser->id) { cmsCore::error404(); } if (!cmsCore::isAjax()) { cmsCore::error404(); } $post = $inBlog->getPost($post_id); if (!$post) { cmsCore::halt(); } $blog = $inBlog->getBlog($post['blog_id']); if (!$blog) { cmsCore::halt(); } // публикуют авторы блога и админы if ($blog['user_id'] != $inUser->id && !$inUser->is_admin) { cmsCore::halt(); } $inBlog->publishPost($post_id); $post['seolink'] = $model->getPostURL($blog['seolink'], $post['seolink']); if ($blog['allow_who'] == 'all' && $post['allow_who'] == 'all') { cmsCore::callEvent('ADD_POST_DONE', $post); } if ($blog['allow_who'] != 'nobody' && $post['allow_who'] != 'nobody') { cmsActions::log('add_post', array('object' => $post['title'], 'user_id' => $post['user_id'], 'object_url' => $post['seolink'], 'object_id' => $post['id'], 'target' => $blog['title'], 'target_url' => $model->getBlogURL($blog['seolink']), 'target_id' => $blog['id'], 'description' => '', 'is_friends_only' => (int) ($blog['allow_who'] == 'friends' || $post['allow_who'] == 'friends'))); } cmsUser::sendMessage(USER_UPDATER, $post['user_id'], $_LANG['YOUR_POST'] . ' <b>«<a href="' . $post['seolink'] . '">' . $post['title'] . '</a>»</b> ' . $_LANG['PUBLISHED_IN_BLOG'] . ' <b>«<a href="' . $model->getBlogURL($blog['seolink']) . '">' . $blog['title'] . '</a>»</b>'); cmsCore::halt('ok'); } ///////////////////////// УДАЛЕНИЕ БЛОГА /////////////////////////////////////// if ($do == 'delblog') { if (!$inUser->id) { cmsCore::error404(); } if (!cmsCore::isAjax()) { cmsCore::error404(); } // получаем блог $blog = $inBlog->getBlog($id); if (!$blog) { cmsCore::error404(); } //Проверяем является пользователь хозяином блога или админом if ($blog['user_id'] != $inUser->id && !$inUser->is_admin) { cmsCore::halt(); } if (!cmsUser::checkCsrfToken()) { cmsCore::halt(); } $inBlog->deleteBlog($blog['id']); cmsCore::addSessionMessage($_LANG['BLOG_IS_DELETED'], 'success'); cmsCore::jsonOutput(array('error' => false, 'redirect' => '/blogs')); } ////////// VIEW POPULAR POSTS ////////////////////////////////////////////////// if ($do == 'best') { $inPage->setTitle($_LANG['POPULAR_IN_BLOGS']); $inPage->addPathway($_LANG['POPULAR_IN_BLOGS']); $inPage->setDescription($_LANG['POPULAR_IN_BLOGS']); // кроме админов в списке только с доступом для всех if (!$inUser->is_admin) { $inBlog->whereOnlyPublic(); } // ограничиваем по рейтингу если надо if ($model->config['list_min_rating']) { $inBlog->ratingGreaterThan($model->config['list_min_rating']); } // всего постов $total = $inBlog->getPostsCount($inUser->is_admin); //устанавливаем сортировку $inDB->orderBy('p.rating', 'DESC'); $inDB->limitPage($page, $model->config['perpage']); // сами посты $posts = $inBlog->getPosts($inUser->is_admin, $model); if (!$posts && $page > 1) { cmsCore::error404(); } cmsPage::initTemplate('components', 'com_blog_view_posts')->assign('pagetitle', $_LANG['POPULAR_IN_BLOGS'])->assign('total', $total)->assign('ownertype', $ownertype)->assign('posts', $posts)->assign('pagination', cmsPage::getPagebar($total, $page, $model->config['perpage'], '/blogs/popular-%page%.html'))->assign('cfg', $model->config)->display('com_blog_view_posts.tpl'); } }
/** * Возвращает прямую ссылку на пункт меню по его типу и опции * @param string $linktype * @param string $linkid * @return string */ public function getMenuLink($linktype, $linkid) { $inDB = cmsDatabase::getInstance(); $menulink = ''; if ($linktype == 'component') { $menulink = '/' . $linkid; } if ($linktype == 'link') { $menulink = $linkid; } if ($linktype == 'category' || $linktype == 'content') { $this->loadModel('content'); $model = new cms_model_content(); switch ($linktype) { case 'category': $menulink = $model->getCategoryURL(null, $inDB->get_field('cms_category', "id='{$linkid}'", 'seolink')); break; case 'content': $menulink = $model->getArticleURL(null, $inDB->get_field('cms_content', "id='{$linkid}'", 'seolink')); break; } } if ($linktype == 'blog') { $this->loadModel('blogs'); $model = new cms_model_blogs(); $menulink = $model->getBlogURL($inDB->get_field('cms_blogs', "id='{$linkid}'", 'seolink')); } if ($linktype == 'video_cat') { $this->loadModel('video'); $model = cms_model_video::initModel(); $cat = $inDB->get_fields('cms_video_category', "id='{$linkid}'", 'id, seolink'); $menulink = $model->getCatLink($cat['seolink'], $cat['id']); } if ($linktype == 'uccat') { $menulink = '/catalog/' . $linkid; } if ($linktype == 'photoalbum') { $menulink = '/photos/' . $linkid; } return $menulink; }
cmsCore::addSessionMessage($_LANG['AD_DO_SUCCESS'], 'success'); cmsCore::redirectBack(); } if ($opt == 'update_blog') { if (!cmsUser::checkCsrfToken()) { cmsCore::error404(); } $blog = $inBlog->getBlog(cmsCore::request('item_id', 'int', 0)); if (!$blog) { cmsCore::error404(); } $title = cmsCore::request('title', 'str', $blog['title']); $seolink_new = $inBlog->updateBlog($blog['id'], array('title' => $title), true); $blog['seolink'] = $seolink_new ? $seolink_new : $blog['seolink']; if (stripslashes($title) != $blog['title']) { cmsActions::updateLog('add_post', array('target' => $title, 'target_url' => $model->getBlogURL($blog['seolink'])), 0, $blog['id']); cmsActions::updateLog('add_blog', array('object' => $title, 'object_url' => $model->getBlogURL($blog['seolink'])), $blog['id']); } cmsCore::addSessionMessage($_LANG['AD_DO_SUCCESS'] . '. ' . $_LANG['AD_SAVE_SUCCESS'], 'success'); if (empty($_SESSION['editlist'])) { cmsCore::redirect('?view=components&do=config&link=blogs&opt=list_blogs'); } else { cmsCore::redirect('?view=components&do=config&link=blogs&opt=edit_blog'); } } if ($opt == 'config') { require '../includes/jwtabs.php'; $GLOBALS['cp_page_head'][] = jwHeader(); cpAddPathway($_LANG['AD_SETTINGS']); $toolmenu[] = array('icon' => 'save.gif', 'title' => $_LANG['SAVE'], 'link' => 'javascript:document.optform.submit();'); $toolmenu[] = array('icon' => 'listblogs.gif', 'title' => $_LANG['AD_BLOGS'], 'link' => '?view=components&do=config&link=blogs&opt=list_blogs');
private function getRelatedPosts($item) { if (!($this->inCore->do == 'post' && $this->inCore->component == 'blogs')) { return $item; } $current_post_id = $item['id']; $current_blog_id = $item['blog_id']; $current_title = $item['title']; $search_mode = (int) $this->config['search_mode']; $tags_mode = (int) $this->config['tags_mode']; $add_mode = (int) $this->config['add_mode']; $need_found = (int) $this->config['limit']; $truncate = (int) $this->config['truncate']; $blank_photo = strip_tags($this->config['blank_photo']); $cash_time = (int) $this->config['cash_time']; $found_posts = array(); $exception = ''; // защита от дурака if ($need_found < 1 || $truncate < 20) { return $item; } // Опционально может быть использовано кеширование if (cmsCore::isCached('rel_posts', $current_post_id, $cash_time, 'HOUR')) { $cache = cmsCore::getCache('rel_posts', $current_post_id); if (isset($item['plugins_output_after'])) { $item['plugins_output_after'] .= $cache; } else { $item['plugins_output_after'] = $cache; } return $item; } // Исключаем текущий, предыдущий и следующий пост $sql = "(\r\n SELECT id\r\n FROM cms_blog_posts\r\n WHERE id < {$current_post_id}\r\n AND blog_id = {$current_blog_id}\r\n ORDER BY id DESC LIMIT 1\r\n ) UNION (\r\n SELECT id\r\n FROM cms_blog_posts\r\n WHERE id > {$current_post_id}\r\n AND blog_id = {$current_blog_id}\r\n ORDER BY id ASC LIMIT 1\r\n )"; if ($res = $this->inDB->query($sql)) { while ($r = $this->inDB->fetch_row($res)) { $exception .= $r[0] . ", "; } } // Первый набор исключений готов $exception .= $current_post_id; if (in_array($search_mode, array(1, 2))) { // Если разрешен поиск по титлу или контенту $target = $search_mode == 1 ? 'p.title' : 'p.content_html'; // Сразу по обоим полям с существующими на сегодняшний день индексами сделать нельзя $sql = "SELECT p.id,\r\n p.title,\r\n p.seolink AS post_link,\r\n p.content_html AS content,\r\n b.seolink AS blog_link,\r\n img.fileurl,\r\n MATCH({$target}) AGAINST('{$current_title}') AS rel\r\n FROM cms_blog_posts p\r\n JOIN cms_blogs b ON b.id = p.blog_id\r\n LEFT JOIN cms_upload_images img ON img.target_id = p.id AND img.target = 'blog_post' AND img.component = 'blogs'\r\n WHERE MATCH({$target}) AGAINST('{$current_title}' IN BOOLEAN MODE)\r\n AND p.allow_who = 'all'\r\n AND b.allow_who = 'all'\r\n AND b.owner = 'user'\r\n AND p.id NOT IN({$exception})\r\n GROUP BY p.id\r\n ORDER BY rel DESC\r\n LIMIT {$need_found}"; if ($res = $this->inDB->query($sql)) { while ($r = $this->inDB->fetch_assoc($res)) { $found_posts[] = $r; } } } $found = count($found_posts); if ($found < $need_found && $tags_mode) { // Если недобор и разрешен поиск по тегам $left_find = $need_found - $found; $except = ''; foreach ($found_posts as $post) { // Обновляю список найденных постов $except .= $post['id'] . ", "; } // Второй набор исключений готов $exception2 = $except . $exception; // Вытягиваю идентификаторы постов имеющих такие же теги как и у текущего поста. // Остаток оставляю в чистом виде в надежде что в последующей выборке все посты с этими идентификаторами попадут в выборку. // В ином случае недобор покроется за счет соседей $sql = "SELECT item_id,\r\n COUNT(item_id) AS match_common_tags\r\n FROM cms_tags\r\n WHERE item_id NOT IN({$exception2})\r\n AND target = 'blogpost'\r\n AND tag IN(SELECT tag\r\n FROM cms_tags\r\n WHERE target = 'blogpost'\r\n AND item_id = {$current_post_id})\r\n GROUP BY item_id\r\n ORDER BY match_common_tags DESC\r\n LIMIT {$left_find}"; $res = $this->inDB->query($sql); // Определять факт успеха операции в этом месте недостаточно, тут нужно гарантировать возврат числа if ($this->inDB->num_rows($res)) { $target_id = ''; while ($r = $this->inDB->fetch_row($res)) { $target_id .= $r[0] . ", "; // Заполняю найдеными идентификаторами переменную } $target_id = rtrim($target_id, ', '); // Вытягиваю посты $sql = "SELECT p.id,\r\n p.title,\r\n p.seolink AS post_link,\r\n p.content_html AS content,\r\n b.seolink AS blog_link,\r\n img.fileurl\r\n FROM cms_blog_posts p\r\n JOIN cms_blogs b ON b.id = p.blog_id\r\n LEFT JOIN cms_upload_images img ON img.target_id = p.id AND img.target = 'blog_post' AND img.component = 'blogs'\r\n WHERE p.allow_who = 'all'\r\n AND b.allow_who = 'all'\r\n AND b.owner = 'user'\r\n AND p.id IN({$target_id})\r\n GROUP BY p.id\r\n LIMIT {$left_find}"; if ($res = $this->inDB->query($sql)) { while ($r = $this->inDB->fetch_assoc($res)) { $found_posts[] = $r; } } } } $found = count($found_posts); if ($found < $need_found && $add_mode == 1) { // Если опять недобор и разрешено дополнять сеседями $left_find = $need_found - $found; $except = ''; foreach ($found_posts as $post) { // Обновляю список найденных постов $except .= $post['id'] . ", "; } // Третий набор исключений готов $exception3 = $except . $exception; // Смотрю как там оно распределено и сколько вообще осталось контента удовлетворяющего моим требованиям $sql = "(\r\n SELECT COUNT(p.id)\r\n FROM cms_blog_posts p\r\n JOIN cms_blogs b ON b.id = p.blog_id\r\n WHERE p.allow_who = 'all'\r\n AND b.allow_who = 'all'\r\n AND b.owner = 'user'\r\n AND p.id < {$current_post_id}\r\n AND p.id NOT IN({$exception3})\r\n ) UNION (\r\n SELECT COUNT(p.id)\r\n FROM cms_blog_posts p\r\n JOIN cms_blogs b ON b.id = p.blog_id\r\n WHERE p.allow_who = 'all'\r\n AND b.allow_who = 'all'\r\n AND b.owner = 'user'\r\n AND p.id > {$current_post_id}\r\n AND p.id NOT IN({$exception3})\r\n )"; if ($res = $this->inDB->query($sql)) { $have_left = $this->inDB->fetch_row($res); $have_left = $have_left[0]; $have_right = $this->inDB->fetch_row($res); $have_right = $have_right[0]; } else { $have_left = 0; $have_right = 0; } // Все дальнейшие действия актуальны только если в базе остался подходящий под все условия контент if ($have_left + $have_right > 0) { // Разделяю на левую и правую половину $need_from_both = $left_find / 2; $need_from_left = floor($need_from_both); $need_from_right = ceil($need_from_both); // Коррекция если текущий оказался крайним if ($have_left < $need_from_left) { $need_from_right = $need_from_right + $need_from_left - $have_left; } if ($have_right < $need_from_right) { $need_from_left = $need_from_left + $need_from_right - $have_right; } if ($need_from_left == 0) { // Если слева оказался ноль $sql = "SELECT p.id,\r\n p.title,\r\n p.seolink AS post_link,\r\n p.content_html AS content,\r\n b.seolink AS blog_link, img.fileurl\r\n FROM cms_blog_posts p\r\n JOIN cms_blogs b ON b.id = p.blog_id\r\n LEFT JOIN cms_upload_images img ON img.target_id = p.id AND img.target = 'blog_post' AND img.component = 'blogs'\r\n WHERE p.allow_who = 'all'\r\n AND b.allow_who = 'all'\r\n AND b.owner = 'user'\r\n AND p.id NOT IN({$exception3})\r\n AND p.id > {$current_post_id}\r\n GROUP BY p.id\r\n ORDER BY p.id ASC\r\n LIMIT {$left_find}"; } else { $sql = "(\r\n SELECT p.id,\r\n p.title,\r\n p.seolink AS post_link,\r\n p.content_html AS content,\r\n b.seolink AS blog_link, img.fileurl\r\n FROM cms_blog_posts p\r\n JOIN cms_blogs b ON b.id = p.blog_id\r\n LEFT JOIN cms_upload_images img ON img.target_id = p.id AND img.target = 'blog_post' AND img.component = 'blogs'\r\n WHERE p.allow_who = 'all'\r\n AND b.allow_who = 'all'\r\n AND b.owner = 'user'\r\n AND p.id NOT IN({$exception3})\r\n AND p.id < {$current_post_id}\r\n GROUP BY p.id\r\n ORDER BY p.id DESC\r\n LIMIT {$need_from_left}\r\n ) UNION (\r\n SELECT p.id,\r\n p.title,\r\n p.seolink AS post_link,\r\n p.content_html AS content,\r\n b.seolink AS blog_link, img.fileurl\r\n FROM cms_blog_posts p\r\n JOIN cms_blogs b ON b.id = p.blog_id\r\n LEFT JOIN cms_upload_images img ON img.target_id = p.id AND img.target = 'blog_post' AND img.component = 'blogs'\r\n WHERE p.allow_who = 'all'\r\n AND b.allow_who = 'all'\r\n AND b.owner = 'user'\r\n AND p.id NOT IN({$exception3})\r\n AND p.id > {$current_post_id}\r\n GROUP BY p.id\r\n ORDER BY p.id ASC\r\n LIMIT {$need_from_right}\r\n )\r\n\r\n LIMIT {$left_find}"; } if ($res = $this->inDB->query($sql)) { while ($post = $this->inDB->fetch_assoc($res)) { $found_posts[] = $post; } } } } // Если ничео нет, то возврат if (count($found_posts) == 0) { return $item; } cmsCore::loadModel('blogs'); $model = new cms_model_blogs(); foreach ($found_posts as $key => $post) { if (!$found_posts[$key]['fileurl']) { $found_posts[$key]['fileurl'] = '/images/photos/small/' . $blank_photo; } $found_posts[$key]['url'] = $model->getPostURL($post['blog_link'], $post['post_link']); $found_posts[$key]['blog_url'] = $model->getBlogURL($post['bloglink']); $found_posts[$key]['content'] = mb_strimwidth(preg_replace('/\\[cut=.*\\]/ui', '', strip_tags($post['content'])), 0, $truncate, '...'); } ob_start(); cmsPage::initTemplate('plugins', 'p_related_posts.tpl')->assign('posts', $found_posts)->display('p_related_posts.tpl'); $html = ob_get_clean(); // Добавляем в спец ячейку вывод if (isset($item['plugins_output_after'])) { $item['plugins_output_after'] .= $html; } else { $item['plugins_output_after'] = $html; } // кешируем если нужно if ($cash_time > 0) { cmsCore::saveCache('rel_posts', $current_post_id, $html); } return $item; }