Example #1
0
 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);
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
    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');
        }
    }
Example #4
0
 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;
 }
Example #5
0
 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();
 }
Example #7
0
File: test.php Project: pta/oes
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;
Example #8
0
 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();
     }
 }
Example #9
0
 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);
 }