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; }
private static function get_validation_object(\News\Model_News $news) { $val = \Validation::forge(); $val->add_model($news); $val->add('published_at_time', '公開日時')->add_rule('datetime_except_second'); if (empty($news->is_published)) { $val->add('is_draft', term('form.draft'))->add_rule('valid_string', 'numeric')->add_rule('in_array', array(0, 1)); } if (\Config::get('news.tags.isEnabled')) { $options = \Model_Tag::get_assoc('name', 'name'); $val->add('tags', term('site.tag'))->set_options($options)->add_rule('array_trim')->add_rule('array_max_length', 128); } return $val; }