function mso_get_comuser($id = 0, $args = array()) { global $MSO; if (!$id) { // не указан id, получаем его из сессии if (isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser']) { $id = $MSO->data['session']['comuser']['comusers_id']; } else { $id = mso_segment(2); } // или сегмент в url } if (!$id) { return array(); } // нет номера, выходим if (!is_numeric($id)) { return array(); } // если id указан не номером, выходим if (!isset($args['limit'])) { $args['limit'] = 20; } if (!isset($args['tags'])) { $args['tags'] = '<p><img><strong><em><i><b><u><s><font><pre><code><blockquote>'; } if (!isset($args['order'])) { $args['order'] = 'comments_date'; } if (!isset($args['asc'])) { $args['asc'] = 'desc'; } $CI =& get_instance(); $CI->db->select('comusers.*, COUNT(comments_comusers_id) as comusers_count_comment_real'); $CI->db->from('comusers'); $CI->db->where('comusers_id', $id); $CI->db->limit(1); // отдавать все комменты, включая и неотмодерированные //$CI->db->where('comments.comments_approved', '1'); $CI->db->join('comments', 'comusers.comusers_id = comments.comments_comusers_id', 'left'); $CI->db->group_by('comments_comusers_id'); $query = $CI->db->get(); if ($query->num_rows() > 0) { $comuser = $query->result_array(); // данные комюзера // pr($comuser); $comuser_count_comment_first = $comuser[0]['comusers_count_comments']; // первоначальное значание колво комментариев // подсоединим к нему [comments] - все его комментарии $CI->db->select('comments.*, page.page_id, page.page_title, page.page_slug'); $CI->db->from('comments'); $CI->db->where('comments_comusers_id', $id); // $CI->db->where('page.page_status', 'publish'); // $CI->db->where('page_date_publish <', date('Y-m-d H:i:s')); $CI->db->where('comments.comments_approved', '1'); $CI->db->join('page', 'page.page_id = comments.comments_page_id'); $CI->db->order_by('comments_date', $args['asc']); if ($args['limit']) { $CI->db->limit($args['limit']); } $query = $CI->db->get(); $comments = array(); // все комменты if ($query->num_rows() > 0) { // нужно обработать тексты комментариев на предмет всяких хуков и лишних тэгов $comments = $query->result_array(); foreach ($comments as $key => $comment) { $comments_content = $comment['comments_content']; // защитим pre $t = $comments_content; $t = str_replace('</pre>', '</pre>', $t); // проставим pre - исправление ошибки CodeIgniter $t = preg_replace_callback('!<pre>(.*?)</pre>!is', 'mso_clean_html_do', $t); $t = strip_tags($t, $args['tags']); $t = mso_xss_clean($t); $t = str_replace('[html_base64]', '<pre>[html_base64]', $t); // проставим pre $t = str_replace('[/html_base64]', '[/html_base64]</pre>', $t); // обратная замена $t = preg_replace_callback('!\\[html_base64\\](.*?)\\[\\/html_base64\\]!is', 'mso_clean_html_posle', $t); $comments_content = $t; // сохраним как текст комментария $comments_content = mso_hook('comments_content', $comments_content); $comments_content = str_replace("\n", "<br>", $comments_content); $comments_content = str_replace('<p>', '<p>', $comments_content); $comments_content = str_replace('</p>', '</p>', $comments_content); $comments_content = str_replace('<P>', '<P>', $comments_content); $comments_content = str_replace('</P>', '</P>', $comments_content); if (mso_hook_present('comments_content_custom')) { $comments_content = mso_hook('comments_content_custom', $comments_content); } else { $comments_content = mso_auto_tag($comments_content, true); $comments_content = mso_hook('content_balance_tags', $comments_content); } $comments_content = mso_hook('comments_content_out', $comments_content); $comments[$key]['comments_content'] = $comments_content; } $comuser[0]['comments'] = $comments; // $comuser[0]['comments'] = $query->result_array(); $comuser[0]['comusers_count_comments'] = count($comments); } else { $comuser[0]['comments'] = array(); } if ($comuser_count_comment_first != count($comments)) { mso_comuser_set_count_comment($id, count($comments)); } // в секцию meta добавим все метаполя данного юзера $CI->db->select('meta_key, meta_value'); $CI->db->from('meta'); $CI->db->where('meta_table', 'comusers'); $CI->db->where('meta_id_obj', $id); $query = $CI->db->get(); if ($query->num_rows() > 0) { // переделаем полученный массив в key = value foreach ($query->result_array() as $val) { $comuser[0]['comusers_meta'][$val['meta_key']] = $val['meta_value']; } } else { $comuser[0]['comusers_meta'] = array(); } // от вских гадостей $comuser[0]['comusers_url'] = mso_xss_clean($comuser[0]['comusers_url']); if ($comuser[0]['comusers_url'] and strpos($comuser[0]['comusers_url'], 'http://') === false) { $comuser[0]['comusers_url'] = 'http://' . $comuser[0]['comusers_url']; } $comuser[0]['comusers_msn'] = mso_xss_clean($comuser[0]['comusers_msn']); // twitter $comuser[0]['comusers_msn'] = mso_slug(str_replace('@', '', $comuser[0]['comusers_msn'])); // подчистка $comuser[0] = mso_clean_post(array('comusers_nik' => 'base', 'comusers_icq' => 'base', 'comusers_jaber' => 'base', 'comusers_skype' => 'base', 'comusers_description' => 'base', 'comusers_msn' => 'base', 'comusers_url' => 'base'), $comuser[0]); // pr($comuser); return $comuser; } else { return array(); } }
function last_pages_widget_custom($arg = array(), $num = 1) { if (!isset($arg['count'])) { $arg['count'] = 7; } if (!isset($arg['page_type'])) { $arg['page_type'] = 'blog'; } if (!isset($arg['sort'])) { $arg['sort'] = 'page_date_publish'; } if (!isset($arg['sort_order'])) { $arg['sort_order'] = 'desc'; } if (!isset($arg['date_format'])) { $arg['date_format'] = 'd/m/Y'; } if (!isset($arg['format'])) { $arg['format'] = '%TITLE%'; } if (!isset($arg['comments_format'])) { $arg['comments_format'] = t(' - комментариев: ') . '%COUNT%'; } if (!isset($arg['exclude_cat'])) { $arg['exclude_cat'] = ''; } if (!isset($arg['include_cat'])) { $arg['include_cat'] = ''; } if (!isset($arg['img_prev'])) { $arg['img_prev'] = ''; } if (!isset($arg['img_prev_def'])) { $arg['img_prev_def'] = ''; } if (!isset($arg['img_prev_attr'])) { $arg['img_prev_attr'] = 'class="left"'; } if (!isset($arg['max_words'])) { $arg['max_words'] = 20; } if (!isset($arg['text_posle'])) { $arg['text_posle'] = ''; } if (!isset($arg['header'])) { $arg['header'] = mso_get_val('widget_header_start', '<h2 class="box"><span>') . t('Последние записи') . mso_get_val('widget_header_end', '</span></h2>'); } if (!isset($arg['block_start'])) { $arg['block_start'] = '<div class="last-pages"><ul class="is_link">'; } if (!isset($arg['block_end'])) { $arg['block_end'] = '</ul></div>'; } $cache_key = 'last_pages_widget' . serialize($arg) . $num; $k = mso_get_cache($cache_key); if ($k) { $current_url = getinfo('siteurl') . mso_current_url(); // текущий урл $k = str_replace('<a href="' . $current_url . '">', '<a href="' . $current_url . '" class="current_url">', $k); return $k; } $arg['exclude_cat'] = mso_explode($arg['exclude_cat']); // рубрики из строки в массив $arg['include_cat'] = mso_explode($arg['include_cat']); // рубрики из строки в массив $CI =& get_instance(); if (strpos($arg['format'], '%TEXT%') === false and strpos($arg['format'], '%TEXT_CUT%') === false and strpos($arg['format'], '%TEXT_PREV%') === false) { $CI->db->select('page.page_id, page_type_name, page_type_name AS page_content, page_slug, page_title, page_date_publish, page_status, COUNT(comments_id) AS page_count_comments', false); } else { $CI->db->select('page.page_id, page.page_content, page_type_name, page_slug, page_title, page_date_publish, page_status, COUNT(comments_id) AS page_count_comments'); } $CI->db->from('page'); $CI->db->where('page_status', 'publish'); //$CI->db->where('page_date_publish <', date('Y-m-d H:i:s')); $time_zone = getinfo('time_zone'); if ($time_zone < 10 and $time_zone > 0) { $time_zone = '0' . $time_zone; } elseif ($time_zone > -10 and $time_zone < 0) { $time_zone = '0' . $time_zone; $time_zone = str_replace('0-', '-0', $time_zone); } else { $time_zone = '00.00'; } $time_zone = str_replace('.', ':', $time_zone); // $CI->db->where('page_date_publish < ', 'NOW()', false); $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $time_zone . '" HOUR_MINUTE)', false); if ($arg['page_type']) { $CI->db->where('page_type_name', $arg['page_type']); } $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id'); $CI->db->join('comments', 'comments.comments_page_id = page.page_id AND comments_approved = 1', 'left'); if ($arg['exclude_cat']) { $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left'); $CI->db->where_not_in('cat2obj.category_id', $arg['exclude_cat']); } if ($arg['include_cat']) { $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left'); $CI->db->where_in('cat2obj.category_id', $arg['include_cat']); } $CI->db->order_by($arg['sort'], $arg['sort_order']); $CI->db->group_by('page.page_id'); $CI->db->group_by('comments_page_id'); $CI->db->limit($arg['count']); $query = $CI->db->get(); if ($query->num_rows() > 0) { $pages = $query->result_array(); require_once getinfo('common_dir') . 'category.php'; require_once getinfo('common_dir') . 'meta.php'; $all_cat = mso_cat_array_single(); // все рубрики $out = ''; foreach ($pages as $key => $page) { // метаполе превьюшки if (strpos($arg['format'], '%IMG_PREV%') !== false) { if ($img_prev = mso_get_meta($arg['img_prev'], 'page', $page['page_id'])) { if (isset($img_prev[0]['meta_value']) and $img_prev[0]['meta_value']) { $img_prev = '<img src="' . $img_prev[0]['meta_value'] . '" alt="" ' . $arg['img_prev_attr'] . '> '; } else { $img_prev = '<img src="' . $arg['img_prev_def'] . '" alt="" ' . $arg['img_prev_attr'] . '> '; } } else { if ($arg['img_prev_def']) { $img_prev = '<img src="' . $arg['img_prev_def'] . '" alt="" ' . $arg['img_prev_attr'] . '> '; } else { $img_prev = ''; } } } else { $img_prev = ''; } $out .= $arg['format']; $out = str_replace('%TITLE%', mso_page_title(mso_slug($page['page_slug']), $page['page_title'], '', '', true, false), $out); $out = str_replace('%URL%', getinfo('site_url') . 'page/' . mso_slug($page['page_slug']), $out); $out = str_replace('%DATE%', mso_page_date($page['page_date_publish'], $arg['date_format'], '', '', false), $out); if ($page['page_count_comments']) { $comments_format = str_replace('%COUNT%', $page['page_count_comments'], $arg['comments_format']); } else { $comments_format = ''; } $out = str_replace('%COMMENTS%', $comments_format, $out); $page_content = $page['page_content']; $page_content = mso_hook('content', $page_content); $page_content = mso_hook('content_auto_tag', $page_content); $page_content = mso_hook('content_balance_tags', $page_content); $page_content = mso_hook('content_out', $page_content); $out = str_replace('%TEXT%', mso_balance_tags(mso_auto_tag(mso_hook('content_complete', $page['page_content']))), $out); if (strpos($arg['format'], '%TEXT_PREV%') !== false) { $page_content = $page['page_content']; $page_content = mso_hook('content', $page_content); $page_content = mso_hook('content_auto_tag', $page_content); $page_content = mso_hook('content_complete', $page_content); $page_content = mso_str_word(strip_tags($page_content), $arg['max_words']) . ' ...'; $out = str_replace('%TEXT_PREV%', $page_content, $out); } # если есть cut, то обрабатываем и его $page_content = str_replace('[xcut', '[cut', $page_content); if (preg_match('/\\[cut(.*?)?\\]/', $page_content, $matches)) { $page_content = explode($matches[0], $page_content, 2); $page_content = $page_content[0]; $page_content = mso_hook('content_complete', $page_content); } $out = str_replace('%TEXT_CUT%', mso_balance_tags(mso_auto_tag($page_content)), $out); $out = str_replace('%IMG_PREV%', $img_prev, $out); if (is_type_slug('page', mso_slug($page['page_slug']))) { $out = str_replace('<li>', '<li class="current_url_page">', $out); } if (isset($arg['include_cat'][0]) and is_page_cat($arg['include_cat'][0])) { $out = str_replace('<li>', '<li class="current_url_cat">', $out); } if (isset($arg['include_cat'][0]) and is_type_slug('category', $all_cat[$arg['include_cat'][0]]['category_slug']) and in_array($page['page_id'], $all_cat[$arg['include_cat'][0]]['pages'])) { $out = str_replace('<li>', '<li class="current_url_allcat">', $out); } } $out = $arg['header'] . $arg['block_start'] . NR . $out . $arg['block_end']; $out = str_replace('</li>', '<div class="clearfix"></div></li>', $out); $out .= $arg['text_posle']; mso_add_cache($cache_key, $out); // сразу в кэш добавим // отметим текущую рубрику. Поскольку у нас к кэше должен быть весь список и не делать кэш для каждого url // то мы просто перед отдачей заменяем текущий url на url с li.current_url $current_url = getinfo('siteurl') . mso_current_url(); // текущий урл $out = str_replace('<a href="' . $current_url . '">', '<a href="' . $current_url . '" class="current_url">', $out); return $out; } }