Beispiel #1
0
	public function merge_tag() {

		if (
			empty(query::$get['master']) || !is_numeric(query::$get['master']) ||
			empty(query::$get['slave']) || !is_numeric(query::$get['slave'])
		) {
			return;
		}

		if (query::$get['master'] != query::$get['slave']) {
			$master = Database::get_full_row('tag', query::$get['master']);
			$slave = Database::get_full_row('tag', query::$get['slave']);

			$old_count = $master['post_main'] +
				$master['post_flea_market'] +
				$master['video_main'] +
				$master['video_flea_market'] +
				$master['art_main'] +
				$master['art_flea_market'];

			$params = array(
				'%|'.$master['alias'].'|%',
				'|'.$slave['alias'].'|',
				'|'.$slave['alias'].'|',
				'|'.$master['alias'].'|',
			);

			Database::sql('update post set tag = if (tag like ?,
				replace(tag, ?, "|"), replace(tag, ?, ?))', $params);
			Database::sql('update video set tag = if (tag like ?,
				replace(tag, ?, "|"), replace(tag, ?, ?))', $params);
			Database::sql('update art set tag = if (tag like ?,
				replace(tag, ?, "|"), replace(tag, ?, ?))', $params);

			$variants = explode('|', $master['variants'].$slave['variants']);
			if ($slave['name'] != $master['name']) {
				$variants[] = $slave['name'];
			}

			$params_main = array('|'.$master['alias'].'|', 'main');
			$params_flea = array('|'.$master['alias'].'|', 'flea_market');

			$update = array(
				'post_main' => Database::get_count('post', 'locate(?, tag) and area = ?', $params_main),
				'post_flea_market' => Database::get_count('post', 'locate(?, tag) and area = ?', $params_flea),
				'video_main' => Database::get_count('video', 'locate(?, tag) and area = ?', $params_main),
				'video_flea_market' => Database::get_count('video', 'locate(?, tag) and area = ?', $params_flea),
				'art_main' => Database::get_count('art', 'locate(?, tag) and area = ?', $params_main),
				'art_flea_market' => Database::get_count('art', 'locate(?, tag) and area = ?', $params_flea),
				'variants' => '|'.implode('|',array_unique(array_filter($variants))).'|',
				'color' => empty($master['color']) ? $slave['color'] : $master['color']
			);

			Database::update('tag', $update, query::$get['master']);
			Database::delete('tag', query::$get['slave']);

			$add_count = array_sum(array_slice($update,0,6)) - $old_count;

			engine::add_res("Тег {$slave['name']} успешно влит в {$master['name']}. ".
				"Счет {$master['name']} подрос на $add_count нахождений.", false, true);
		}
	}