/** * Add new tag and tag link * @param integer $article_id * @param array $in_tag * @return boolean true on success or false on fail */ function add_tag_link($article_id, $in_tag) { if (!vivvo_hooks_manager::call('tag_addLink', array(&$article_id, &$in_tag))) { return vivvo_hooks_manager::get_status(); } $sm = vivvo_lite_site::get_instance(); $in_tag = htmlspecialchars($in_tag, ENT_QUOTES, 'UTF-8'); if ($sm->user && $sm->user->can('ARTICLE_TAG')) { $tag_array_finish = array(); $tag_array = array_map('trim', explode(',', $in_tag)); foreach ($tag_array as $k => $v) { if (strlen($v) > 2 && !is_numeric($v) && !preg_match('/[\\?\\/\\&\\.]/', $v)) { $tag_array_finish[] = strtolower($v); } } $tag_list = new Tags_list(); $tag_list->get_tag_by_name($tag_array_finish); $new_tag_index = 0; $new_tag = array(); //add missing tags foreach ($tag_list->list as $tag) { if (in_array($tag_name = strtolower($tag->get_name()), $tag_array_finish)) { unset($tag_array_finish[array_search($tag_name, $tag_array_finish)]); } } $tag_array_finish = array_filter($tag_array_finish); foreach ($tag_array_finish as $tag_name) { $new_tag[$new_tag_index] = new Tags(); $new_tag[$new_tag_index]->set_name($tag_name); $new_tag[$new_tag_index]->set_sefriendly(make_sefriendly($tag_name)); $this->_post_master->set_data_object($new_tag[$new_tag_index]); if ($this->_post_master->sql_insert()) { $tag_id = $this->_post_master->get_work_id(); $tag_list->list[$tag_id] =& $new_tag[$new_tag_index]; } else { $this->set_error_code(2401); return false; } $new_tag_index++; } $new_tag_ids = $tag_list->get_list_ids(); $atl = new ArticlesTags_list(); $atl->get_by_article_user($article_id, $sm->user->get_id()); $article_tag_ids = $atl->get_property_list('tag_id'); //add new tag links if (!empty($new_tag_ids)) { $add_article_tags = $new_tag_ids; if (!empty($article_tag_ids)) { $add_article_tags = array_diff($new_tag_ids, $article_tag_ids); } if (!empty($add_article_tags)) { foreach ($add_article_tags as $tag_id) { $at = new ArticlesTags(); $at->set_tag_id($tag_id); $at->set_article_id($article_id); $at->set_user_id($sm->user->get_id()); $this->_post_master->set_data_object($at); if (!$this->_post_master->sql_insert()) { $this->set_error_code(2402); return false; } } } } return true; } else { $this->set_error_code(2403); return false; } }
function generate_output($params) { $this->set_template($params); if (!empty($params['search_advanced_mode'])) { class_exists('Tags') or (require VIVVO_FS_INSTALL_ROOT . 'lib/vivvo/core/Tags.class.php'); $list = new Tags_list(); $list->search_from_params($params); $this->_template->assign('tags_list', $list->list); $this->_template->assign('tag_list', $list->list); $this->_template->assign('tags', $list); } else { $params['search_limit'] = intval($params['search_limit']); if ($params['search_limit'] == 0) { $params['search_limit'] = 20; } if (!isset($params['offset'])) { $params['offset'] = 0; } if (!isset($params['search_sort_by'])) { $params['search_sort_by'] = ''; } if (!isset($params['search_order'])) { $params['search_order'] = ''; } $um = vivvo_lite_site::get_instance()->get_url_manager(); if (isset($params['search_article_id'])) { require_once VIVVO_FS_INSTALL_ROOT . 'lib/vivvo/core/ArticlesTags.class.php'; $articles_tags_list = new ArticlesTags_list(null, $params['fields']); if (!empty($params['search_user_id'])) { $articles_tags_list->get_by_article_user($params['search_article_id'], $params['search_user_id']); } elseif (isset($params['search_topic_id'])) { $articles_tags_list->get_articles_tags_by_topic_id($params['search_article_id'], $params['search_topic_id']); } else { $articles_tags_list->get_articles_tags_by_article($params['search_article_id']); } $this->_template->assign('tag_list', $articles_tags_list->list); $this->_template->assign('tags', $articles_tags_list); } else { if (isset($params['search_starting_with']) && !empty($params['search_starting_with'])) { require_once VIVVO_FS_INSTALL_ROOT . 'lib/vivvo/core/Tags.class.php'; $tag_list = new Tags_list(); $tag_list->search(array('search_starting_with' => $params['search_starting_with']), $params['search_sort_by'], $params['search_order'], $params['search_limit'], $params['offset']); $this->_template->assign('tag_list', $tag_list->list); $this->_template->assign('tags', $tag_list); } else { if (!empty($params['search_sort_by'])) { require_once VIVVO_FS_INSTALL_ROOT . 'lib/vivvo/core/Tags.class.php'; $tag_list = new Tags_list(); $tag_list->search(array(), $params['search_sort_by'], $params['search_order'], $params['search_limit'], $params['offset']); $this->_template->assign('tag_list', $tag_list->list); $this->_template->assign('tags', $tag_list); } else { require_once VIVVO_FS_INSTALL_ROOT . 'lib/vivvo/core/Tags.class.php'; $tag_list = new Tags_list(); $tag_list->get_rated_tags($params['search_limit'], isset($params['search_topic_id']) ? $params['search_topic_id'] : 0, isset($params['search_category_id']) ? $params['search_category_id'] : -1); $tag_list->set_fontsize(); $this->_template->assign('tag_list', $tag_list->list); $this->_template->assign('tags', $tag_list); } } } } if (isset($params['title'])) { $this->_template->assign('title', $params['title']); } $this->_template->assign('box_id', $params['box_id']); }