protected function do_add($data) { if (!isset($data['set']) || !is_array($data['set'])) { return array('success' => false); } if (!empty($data['start'])) { $utc = $data['utc'] + 240; $start = date('Y-m-d G:i:s', strtotime($data['start']) + $utc * 60); } else { $start = ''; } $sets = array(); foreach ($data['set'] as $set) { if (preg_match('/[^-\\d\\.a-z]/ui', $set)) { continue; } $set = Database::get_full_row('set', 'id = ?', $set); if (empty($set)) { continue; } $sets[] = $set; if (!$set['grabbed']) { Grabber::get_set($set['id']); } } Database::begin(); Database::insert('game', array('id_user' => $this->user, 'pick_time' => isset($data['pick_time']) ? $data['pick_time'] : 0, 'pause_time' => isset($data['pause_time']) ? $data['pause_time'] : 0, 'type' => isset($data['type']) ? $data['type'] : 1, 'start' => $start)); $id_game = Database::last_id(); $order = 0; foreach ($sets as $set) { Database::insert('game_set', array('id_game' => $id_game, 'order' => ++$order, 'id_set' => $set['id'])); } Database::commit(); return array('success' => true); }
/** * Apply a SQL source file to the database as part of running an installation step. * * @param string $sourceFileMethod * @param string $stepName * @param bool $archiveTableMustNotExist * @return Status */ private function stepApplySourceFile($sourceFileMethod, $stepName, $archiveTableMustNotExist = false) { $status = $this->getConnection(); if (!$status->isOK()) { return $status; } $this->db->selectDB($this->getVar('wgDBname')); if ($archiveTableMustNotExist && $this->db->tableExists('archive', __METHOD__)) { $status->warning("config-{$stepName}-tables-exist"); $this->enableLB(); return $status; } $this->db->setFlag(DBO_DDLMODE); // For Oracle's handling of schema files $this->db->begin(__METHOD__); $error = $this->db->sourceFile(call_user_func([$this, $sourceFileMethod], $this->db)); if ($error !== true) { $this->db->reportQueryError($error, 0, '', __METHOD__); $this->db->rollback(__METHOD__); $status->fatal("config-{$stepName}-tables-failed", $error); } else { $this->db->commit(__METHOD__); } // Resume normal operations if ($status->isOK()) { $this->enableLB(); } return $status; }
public function delete_unused_urls() { Database::begin(); try { Database::sql('DELETE FROM post_link WHERE post_id NOT IN (SELECT id FROM post)'); Database::sql('DELETE FROM post_update_link WHERE update_id NOT IN (SELECT id FROM post_update)'); Database::sql('DELETE FROM post_link_url WHERE link_id NOT IN (SELECT id FROM post_link)'); Database::sql('DELETE FROM post_update_link_url WHERE link_id NOT IN (SELECT id FROM post_update_link)'); Database::sql('DELETE FROM post_url WHERE id NOT IN (SELECT url_id FROM post_link_url) AND id NOT IN (SELECT url_id FROM post_update_link_url)'); $count = Database::count_affected(); if ($count > self::MAX_LINK_DELETIONS) { Database::rollback(); throw new Error_Cron('Too many post urls pending for deletion'); } Database::commit(); } catch (PDOException $e) { Database::rollback(); throw new Error_Cron('Error with database, while deleting post urls'); } }
public function start($users) { // Уже запущен if ($this->get('state') != 0) { return false; } $users = array_filter(explode(',', $users)); $users[] = $this->get('id_user'); $users = array_unique($users); shuffle($users); Database::begin(); try { $this->create_data($users); } catch (Error $e) { Database::rollback(); return false; } Database::commit(); return true; }
public function main() { Database::begin(); try { $data = $this->reader->get_data(); foreach ($data as $key => $value) { if (method_exists($this, $key)) { $this->{$key}($data); } } if (!empty($data['edit']) && !array_key_exists($data['edit'], $data) && method_exists($this, $data['edit'])) { $function = $data['edit']; $this->{$function}($data); } $this->save_changes(); Database::commit(); } catch (PDOException $e) { Database::rollback(); } }
protected function acceptRequest_rollback(Database $dbw, $user_id, $acd_id) { $dbw->begin(); # DELETE the user in case something caused a COMMIT already somewhere. if ($user_id) { $dbw->delete('user', array('user_id' => $user_id), __METHOD__); $dbw->delete('user_groups', array('ug_user' => $user_id), __METHOD__); } # DELETE the new account_credentials row likewise. if ($acd_id) { $dbw->delete('account_credentials', array('acd_id' => $acd_id), __METHOD__); } $dbw->commit(); }
include_once "../lib/Database.php"; session_start(); if (!isset($_SESSION['student'])) { header("Location: login.php"); } $student = $_SESSION['student']; $db = new Database(DB_HOST, DB_USER, DB_PASS); $db->selectDatabase(DB_NAME); if (isset($_GET['eid'])) { $eid = $_GET['eid']; $result = $db->query("select * from oes_Exam where ID = {$eid}"); $exam = mysql_fetch_array($result); mysql_free_result($result); $test = $db->openTest($student, $eid); if ($test == null) { $db->begin(); try { $test = $db->createTest($student, $eid, $exam['Subject'], $exam['NoQ']); $db->commit(); } catch (Exception $e) { $db->rollback(); ?> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head> <center>Không thể tạo <b>Bài thi</b> mới.</center> <center><button onClick='history.back()'>Trở lại</button></center> <?php echo $e->getMessage(); return -1; } } $_SESSION['test'] = $test;
public static function get_set($set, $transaction_started = false) { try { if (!$transaction_started) { Database::begin(); } $count = 0; while ($count < 2000) { $doc = new DOMDocument(); $url = 'http://www.mtg.ru/cards/search.phtml?Grp=' . $set . '&page=' . ++$count; @$doc->loadHTMLFile($url); $xpath = new DOMXpath($doc); $elements = $xpath->query(self::$queryCard); foreach ($elements as $element) { $insert = array('mana_cost' => ''); // $class = $element->getAttribute('class'); // $class = explode(' ', $class); // $insert['color'] = str_replace('Color', '', $class[0]); $rarity = $xpath->query(self::$queryRarity, $element)->item(0); if (empty($rarity)) { // Базовая земля или прочая хренька $rarity = 0; } else { $rarity = self::$rarity[$rarity->getAttribute('alt')]; } $name = $element->getElementsByTagName('h2')->item(0); if (empty($name)) { continue; } else { $name = $name->C14N(); } preg_match('/.*?<h2>(.+?)(?:<\\/h2>\\s*$|\\/\\s*<wbr)/sui', $name, $name); $insert['name'] = trim($name[1]); $insert['image'] = $xpath->query(self::$queryImg, $element)->item(0)->getAttribute('src'); $insert['image'] = str_replace('/pictures', '', $insert['image']); $insert['image'] = str_replace('_small/', '/', $insert['image']); $manas = $xpath->query(self::$queryMana, $element); $colors = ''; foreach ($manas as $mana) { $mana_symbol = $mana->getAttribute('alt'); $insert['mana_cost'] .= '(' . $mana_symbol . ')'; $colors .= preg_replace('/[^WUBRG]/u', '', $mana_symbol); } $colors = array_filter(array_unique(str_split($colors))); if (count($colors) > 1) { $insert['color'] = 'M'; } elseif (!trim($insert['mana_cost'])) { $insert['color'] = 'L'; } elseif (!empty($colors)) { $insert['color'] = reset($colors); } else { $insert['color'] = 'A'; } Database::insert('card', $insert); Database::insert('set_card', array('id_set' => $set, 'id_card' => Database::last_id(), 'rarity' => $rarity)); } $last = $xpath->query(self::$queryLast)->item(0); if (!strpos($last->C14N(), '|')) { break; } } Database::update('set', array('grabbed' => 1), 'id = ?', $set); Database::commit(); } catch (DOMException $e) { Database::rollback(); } }
protected function do_set_deck($get) { if (!isset($get['c']) || !is_array($get['c']) || count($get['c']) < 40) { return array('success' => false, 'step' => 1); } Database::begin(); try { $this->game->set_deck($this->user, $get['c']); } catch (Error $e) { Database::rollback(); } Database::commit(); return array('success' => true); }