<commit_before><?php

namespace Fc2blog\Model;

class EntryTagsModel extends Model
{

  public static $instance = null;

  public function __construct(){}

  public static function getInstance()
  {
    if (!self::$instance) {
      self::$instance = new EntryTagsModel();
    }
    return self::$instance;
  }

  public function getTableName()
  {
    return 'entry_tags';
  }

  /**
   * バリデート処理
   * @param $data
   * @param $valid_data
   * @param array $white_list
   * @return array
   */
  public function validate($data, &$valid_data, $white_list=array())
  {
    // バリデートを定義
    $this->validates = array(
      'tag_id' => array(
        'multiple' => array(
          'int' => true,            // int型にキャスト
          'min' => array('min'=>0), // 0以上
        ),
        'array_unique' => true,     // 重複排除
      ),
    );

    return parent::validate($data, $valid_data, $white_list);
  }

  /**
   * 記事のタグID一覧を取得
   * @param $blog_id
   * @param $entry_id
   * @return array
   */
  public function getTagIds($blog_id, $entry_id)
  {
    $tags = $this->find('all', array(
      'fields' => 'tag_id',
      'where'  => 'blog_id=? AND entry_id=?',
      'params' => array($blog_id, $entry_id)
    ));
    $ids = array();
    foreach($tags as $tag) {
      $ids[] = $tag['tag_id'];
    }
    return $ids;
  }

  /**
   * 記事とタグの紐付けを保存する
   * タグの記事数の変動も行う
   * @param string $blog_id
   * @param int $entry_id
   * @param string[] $tags
   * @return bool
   */
  public function save(string $blog_id, int $entry_id, array $tags)
  {
    $tags_model = Model::load('Tags');

    // 入力値整形処理
    if (!is_array($tags)) {
      // 配列でない場合はデータ無しとして扱う
      $tags = array();
    }
    $temp_tags = array();
    foreach($tags as $key => $tag){
      if (is_string($tag) && $tag!='') {
        // 文字列のみ許可
        $temp_tags[] = $tag;
      }
    }
    $tags = array_unique($temp_tags);

    $now_tags = $tags_model->getListByNames($blog_id, $tags);
    $now_tag_values = array_values($now_tags);<commit_msg>Fix: some save() caller expecting that $tags allow to be null.<commit_after><?php

namespace Fc2blog\Model;

class EntryTagsModel extends Model
{

  public static $instance = null;

  public function __construct(){}

  public static function getInstance()
  {
    if (!self::$instance) {
      self::$instance = new EntryTagsModel();
    }
    return self::$instance;
  }

  public function getTableName()
  {
    return 'entry_tags';
  }

  /**
   * バリデート処理
   * @param $data
   * @param $valid_data
   * @param array $white_list
   * @return array
   */
  public function validate($data, &$valid_data, $white_list=array())
  {
    // バリデートを定義
    $this->validates = array(
      'tag_id' => array(
        'multiple' => array(
          'int' => true,            // int型にキャスト
          'min' => array('min'=>0), // 0以上
        ),
        'array_unique' => true,     // 重複排除
      ),
    );

    return parent::validate($data, $valid_data, $white_list);
  }

  /**
   * 記事のタグID一覧を取得
   * @param $blog_id
   * @param $entry_id
   * @return array
   */
  public function getTagIds($blog_id, $entry_id)
  {
    $tags = $this->find('all', array(
      'fields' => 'tag_id',
      'where'  => 'blog_id=? AND entry_id=?',
      'params' => array($blog_id, $entry_id)
    ));
    $ids = array();
    foreach($tags as $tag) {
      $ids[] = $tag['tag_id'];
    }
    return $ids;
  }

  /**
   * 記事とタグの紐付けを保存する
   * タグの記事数の変動も行う
   * @param string $blog_id
   * @param int $entry_id
   * @param ?string[] $tags
   * @return bool
   */
  public function save(string $blog_id, int $entry_id, ?array $tags)
  {
    $tags_model = Model::load('Tags');

    // 入力値整形処理
    if (!is_array($tags)) {
      // 配列でない場合はデータ無しとして扱う
      $tags = array();
    }
    $temp_tags = array();
    foreach($tags as $key => $tag){
      if (is_string($tag) && $tag!='') {
        // 文字列のみ許可
        $temp_tags[] = $tag;
      }
    }
    $tags = array_unique($temp_tags);

    $now_tags = $tags_model->getListByNames($blog_id, $tags);
    $now_tag_values = array_values($now_tags);
{'fraction_non_alphanumeric': 0.1654747225647349, 'fraction_numerical': 0.0014796547472256474, 'mean_word_length': 2.4372881355932203, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 29, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2953589', 'n_tokens_mistral': 1576, 'n_tokens_neox': 1565, 'n_words': 299}