Example #1
0
 protected function do_add($data)
 {
     if (empty($data['text'])) {
         return array('success' => false);
     }
     $user = $this->user;
     $room = $this->id;
     $text = $data['text'];
     if ($room > 0 && !Database::get_count('game_user', 'id_game = ? and id_user = ?', array($room, $user))) {
         return array('success' => false);
     }
     $replace = array('&' => '&amp', '"' => '&quot;', '<' => '&lt;', '>' => '&gt;', '\\' => '&#092;', "'" => '&apos;');
     $text = str_replace(array_keys($replace), array_values($replace), $text);
     $text = trim($text);
     $lines = explode("\n", $text);
     $first_line = array_shift($lines);
     if (!$first_line) {
         return array('success' => false);
     }
     if (preg_match('/^.{200}/ui', $first_line, $result)) {
         $header = $result[0];
     } elseif (!empty($lines)) {
         $header = $first_line;
     } else {
         $header = '';
     }
     Database::insert('note', array('id_game' => $room, 'id_user' => $user, 'text' => $text, 'header' => $header));
     return array('success' => true);
 }
Example #2
0
	function edit_art_groups() {
		global $check;
		if ($check->num(query::$post['id']) && query::$post['type'] == 'art' && is_array(query::$post['group'])) {

			$qroups = array_filter(array_unique(query::$post['group']));

			foreach ($qroups as $key => $group) {
				if (Database::get_count('art_pool',
					'id = ? and password != "" and password != ?',
					array($group, md5(query::$post['password'])))
				) {
					unset($qroups[$key]);
				}
			}

			foreach ($qroups as $group) {
				$order = Database::order('order')->
					get_field('art_in_pool', 'order', 'pool_id = ?', $group);

				Database::insert('art_in_pool', array(
					'art_id' => query::$post['id'],
					'pool_id' => $group,
					'order' => $order + 1
				));
			}
		}
	}
Example #3
0
 public function __construct($url)
 {
     parent::__construct($url);
     if (isset($url[2]) && is_numeric($url[2]) && Database::get_count('game', $url[2])) {
         $this->game = $url[2];
     }
 }
Example #4
0
 protected function do_delete($data)
 {
     if (!isset($data['id']) || !is_numeric($data['id']) || !Database::get_count('game', 'id_user = ? and id = ? and state != ?', array($this->user, $data['id'], 4))) {
         return array('success' => false);
     }
     Database::update('game', array('state' => 4), 'id_user = ? and id = ?', array($this->user, $data['id']));
     return array('success' => true);
 }
Example #5
0
 protected function do_add($data)
 {
     $time = date('Y-m-d G:i:s', time() - Config::get('chat', 'loadtime'));
     $presense = Database::get_count('presense', 'time > ? and id_user = ? and id_game = ?', array($time, $this->user, $this->id));
     if (!isset($data['text']) || preg_match('/<>&\\n\\r/', $data['text']) || !$presense) {
         return array('success' => false);
     }
     Database::insert('message', array('id_game' => $this->id, 'id_user' => $this->user, 'text' => $data['text']));
     return array('success' => true, 'id' => Database::last_id());
 }
Example #6
0
 protected function do_login($data)
 {
     $password = $this->encode_password($data['password']);
     $login = preg_replace('/[^a-zа-яё_\\s\\d]/ui', '', $data['login']);
     if (!Database::get_count('user', 'login = ?', $login)) {
         return array('error' => 'login_not_exist', 'success' => false);
     }
     $cookie = Database::get_field('user', 'cookie', 'login = ? and password = ?', array($login, $password));
     if (empty($cookie)) {
         return array('error' => 'password_incorrect', 'success' => false);
     }
     setcookie('user', $cookie, time() + MONTH, '/');
     return array('success' => true);
 }
Example #7
0
	function edit_personal_menu () {
		$id = (int) query::$get['id'];

		$return = Database::get_full_row('head_menu_user', $id);

		if (!empty($return)) {
			$return['count'] = Database::get_count('head_menu_user',
				'cookie = ?',
				query::$cookie
			);

			if ($return['url']{0} == '/') {
				$return['url'] = 'http://'.def::site('domain').$return['url'];
			}
		}

		return $return;
	}
Example #8
0
 public function parse_images()
 {
     $params = array('pack_art', $this->id);
     $art = Database::get_full_table('misc', 'type = ? and data1 = ? order by data4 limit ' . rand(4, 9), $params);
     $total = Database::get_field('misc', 'data4', 'type = ? and data2 = ?', array('pack_status', $this->id));
     $current_order = Database::get_field('art_in_pack', 'max(`order`)', 'pack_id = ?', $this->id);
     $next_order = !is_numeric($current_order) ? 0 : $current_order + 1;
     if (is_array($art)) {
         $insert_in_pack = array();
         foreach ($art as $one) {
             Database::delete('misc', 'type = ? and id = ?', array('pack_art', $one['id']));
             try {
                 $worker = new Transform_Upload_Art($one['data2'], $one['data4']);
                 $data = $worker->process_file();
                 $art = new Model_Art(array('md5' => $data['md5'], 'thumb' => $data['thumb'], 'extension' => $data['extension'], 'resized' => $data['resized'], 'animated' => $data['animated'], 'author' => '|', 'category' => '|nsfw|game_cg|', 'tag' => '|prostavte_tegi|', 'area' => 'cg'));
                 $art->insert();
             } catch (Error $e) {
                 $data = array();
                 if ($e->getCode() == Error_Upload::ALREADY_EXISTS) {
                     $art = new Model_Art($e->getMessage());
                     if ($art['area'] == 'deleted') {
                         $art['area'] = 'cg';
                         $art->commit();
                     }
                 } else {
                     continue;
                 }
             }
             $insert_in_pack[] = array($art->get_id(), $this->id, $next_order, pathinfo($one['data2'], PATHINFO_BASENAME));
             $next_order++;
         }
         Database::bulk_insert('art_in_pack', $insert_in_pack, array('art_id', 'pack_id', 'order', 'filename'));
     }
     if ($count = Database::get_count('misc', 'type = ? and data1 = ?', array('pack_art', $this->id))) {
         Database::update('misc', array('data3' => $total - $count), 'type = ? and data2 = ?', array('pack_status', $this->id));
     } else {
         Database::update('misc', array('data1' => 'done'), 'type = ? and data2 = ?', array('pack_status', $this->id));
         Database::update('art_pack', array('weight' => 0), $this->id);
     }
 }
Example #9
0
 public function insert()
 {
     if (!Check::is_hash($this->get('md5')) || !Check::is_hash($this->get('thumb')) || !$this->get('extension') || Database::get_count('art', 'md5 = ?', $this->get('md5'))) {
         return $this;
     }
     if ($this->get('resized') == 1) {
         $this->calculate_resize();
     }
     $this->set('pretty_date', Transform_Text::rudate());
     $this->set('sortdate', ceil(microtime(true) * 1000));
     if (!$this->get('area')) {
         $this->set('area', def::area(1));
     }
     $this->correct_tags();
     parent::insert();
     if (function_exists('puzzle_fill_cvec_from_file') && function_exists('puzzle_compress_cvec')) {
         $imagelink = IMAGES . SL . 'booru' . SL . 'thumbs' . SL . 'large_' . $this->get('thumb') . '.jpg';
         $vector = puzzle_fill_cvec_from_file($imagelink);
         $vector = base64_encode(puzzle_compress_cvec($vector));
         Database::insert('art_similar', array('id' => $this->get_id(), 'vector' => $vector));
     }
     return $this;
 }
Example #10
0
 public function is_ready($user)
 {
     return Database::get_count('game_user', 'id_game = ? and id_user = ? and created_deck = 1', array($this->get_id(), $user)) > 0;
 }
Example #11
0
    public function pick($user, $card, $set, $shift)
    {
        $user_data = Database::get_row('game_user', array('order', 'force_picks'), 'id_user = ? and id_game = ?', array($user, $this->get_id()));
        $max = Database::get_field('game_user', 'max(`order`)', 'id_game = ?', $this->get_id());
        $order = ($user_data['order'] + ($max + 1) * 15 + $shift * ($set % 2 ? 1 : -1)) % ($max + 1);
        $user_booster = Database::get_field('game_user', 'id_user', '`order` = ? and id_game = ?', array($order, $this->get_id()));
        $id_booster = Database::join('game_set', 'gs.id = gb.id_game_set')->get_field('game_booster', 'gb.`id`', 'gs.`order` = ? and gs.id_game = ? and gb.id_user = ?', array($set, $this->get_id(), $user_booster));
        $pick = $shift + ($set - 1) * 15;
        Database::update('game_booster_card', array('id_user' => $user, 'pick' => $pick, 'forced' => 0), 'id = ? and id_user = 0 and not exists
			(select 1 from (select * from `game_booster_card` where id_game_booster = ?) as t
			where t.pick = ? and t.id_user > 0)', array($card, $id_booster, $shift));
        $success = Database::count_affected() > 0;
        if ($user_data['force_picks']) {
            Database::update('game_user', array('force_picks' => 0), 'id_user = ? and id_game = ?', array($user, $this->get_id()));
        }
        if ($success) {
            $picked_count = Database::join('game_booster', 'gb.id_game_set = gs.id')->join('game_booster_card', 'gbc.id_game_booster = gb.id')->get_count('game_set', 'gs.id_game = ? and gs.order = ? and gbc.pick = ? and gbc.id_user > 0', array($this->get_id(), $set, $pick));
            $force_users = Database::get_vector('game_user', 'id_user', 'id_game = ? and force_picks > ?', array($this->get_id(), 1));
            $user_count = Database::get_count('game_user', 'id_game = ?', $this->get_id());
            $cache_key = 'force_lock_' . $this->get_id() . '_' . $pick;
            if (count($force_users) + $picked_count >= $user_count && !Cache::get($cache_key)) {
                Cache::set($cache_key, 1);
                if (!empty($force_users)) {
                    $this->force_picks($force_users, $set, $shift);
                }
                $this->shift_game_steps();
                Cache::delete($cache_key);
            }
        }
        return $success;
    }
Example #12
0
	protected function get_random_art($type) {
		$data = false;
		$attempts = 0;
		while (!$data && ++$attempts < 5) {
			$count = Database::get_count('art', 'area = ?', $type);
			if (!$count) {
				continue;
			}
			$position = mt_rand(0, $count - 1);
			$data = Database::limit(1, $position)->get_full_row('art', 'area = ?', $type);
		}

		return $data;
	}
Example #13
0
	public function sort_pool () {

		if (!Check::num(query::$get['id'])) {
			return;
		}

		$arts = array_values(array_unique(query::$post['art']));
		$id = query::$get['id'];

		if (
			count($arts) !=
			Database::get_count('art_in_pool', 'pool_id = ?', $id)
		) {
			return;
		}

		foreach ($arts as $order => $art) {
			Database::update('art_in_pool', array('order' => $order),
				'art_id = ? and pool_id = ?', array($art, $id));
		}
	}
Example #14
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);
		}
	}