Ejemplo n.º 1
0
 public static function save_tags($tag_names, $news_id)
 {
     $saved_ids = array();
     if (!is_array($tag_names)) {
         $tag_names = (array) $tag_names;
     }
     if (!$tag_names) {
         return $saved_ids;
     }
     $news_tag_ids4delete = self::get_assoc('tag_id', 'id', array('news_id' => $news_id));
     $tag_ids = \Model_Tag::get_assoc('name', 'id', array('name', 'in', $tag_names));
     foreach ($tag_names as $name) {
         if (!empty($tag_ids[$name])) {
             $tag_id = $tag_ids[$name];
         } else {
             $tag = \Model_Tag::forge(array('name' => $name));
             $tag->save();
             $tag_id = $tag->id;
         }
         if (!($news_tag = self::get_one4news_id_and_tag_id($news_id, $tag_id))) {
             $news_tag = self::forge(array('news_id' => $news_id, 'tag_id' => $tag_id));
             $news_tag->save();
             $saved_ids[] = $news_tag->id;
         }
         if (isset($news_tag_ids4delete[$tag_id])) {
             unset($news_tag_ids4delete[$tag_id]);
         }
     }
     // delete records
     if ($news_tag_ids4delete) {
         foreach ($news_tag_ids4delete as $news_tag_id4delete) {
             if ($news_tag = self::find($news_tag_id4delete)) {
                 $news_tag->delete();
             }
         }
     }
     return $saved_ids;
 }