Beispiel #1
0
 /**
  * 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;
     }
 }