Esempio n. 1
0
 public function stack_load_card($card_id)
 {
     $stmt = $this->file_db->prepare('SELECT card.bkgnd_id, bkgnd.bkgnd_name, bkgnd.cant_delete, bkgnd.dont_search, ' . 'bkgnd.bkgnd_data, card.card_data, card_name, card_seq, card.object_data, ' . 'bkgnd.object_data, card.cant_delete, card.dont_search, card.marked, card.card_art, bkgnd.bkgnd_art ' . 'FROM card JOIN bkgnd ON card.bkgnd_id=bkgnd.bkgnd_id WHERE card_id=?');
     Stack::sl_ok($stmt, $this->file_db, 'Loading Card (1)');
     Stack::sl_ok($stmt->execute(array(intval($card_id))), $this->file_db, 'Loading Card (2)');
     $row = $stmt->fetch(PDO::FETCH_NUM);
     if ($row === false) {
         return null;
     }
     $card['card_id'] = intval($card_id);
     $card['card_name'] = $row[6];
     $card['card_seq'] = $row[7] / 10;
     $card['card_cant_delete'] = Stack::decode_bool($row[10]);
     $card['card_dont_search'] = Stack::decode_bool($row[11]);
     $card['card_marked'] = Stack::decode_bool($row[12]);
     $data = json_decode($row[5], true);
     $card['card_script'] = Stack::nvl($data['card_script'], array('content' => '', 'selection' => 0));
     $card['card_has_art'] = Stack::nvl($data['card_has_art'], false);
     $card['data'] = '';
     if (isset($data['data'])) {
         $card['data'] = $data['data'];
     }
     $card['card_art'] = null;
     if (isset($row[13]) && $row[13] !== '' && $row[13] !== null) {
         $card['card_art'] = $row[13];
     }
     //if (isset($data['content']))
     //	$card['content'] = $data['content'];
     $card['card_object_data'] = $row[8];
     $card['bkgnd_id'] = $row[0];
     $card['bkgnd_name'] = $row[1];
     $card['bkgnd_cant_delete'] = Stack::decode_bool($row[2]);
     $card['bkgnd_dont_search'] = Stack::decode_bool($row[3]);
     $data = json_decode($row[4], true);
     $card['bkgnd_script'] = Stack::nvl($data['bkgnd_script'], array('content' => '', 'selection' => 0));
     $card['bkgnd_has_art'] = Stack::nvl($data['bkgnd_has_art'], false);
     $card['bkgnd_art'] = null;
     if (isset($row[14]) && $row[14] !== '' && $row[14] !== null) {
         $card['bkgnd_art'] = $row[14];
     }
     $card['bkgnd_object_data'] = $row[9];
     $card['stack_count'] = Stack::stack_get_count_cards(null);
     $card['bkgnd_count'] = Stack::stack_get_count_cards($card['bkgnd_id']);
     return $card;
 }
Esempio n. 2
0
 public function stack_delete_card($card_id)
 {
     $this->_check_mutability();
     $next_card_id = null;
     $this->file_db->beginTransaction();
     /* request some information about the card; bkgnd ID, sequence and cant_delete flags */
     $stmt = $this->file_db->prepare('SELECT card.bkgnd_id, card.seq, card.cant_delete, bkgnd.cant_delete ' . 'FROM card JOIN bkgnd ON card.bkgnd_id=bkgnd.id WHERE card.id=?');
     $stmt->execute(array(intval($card_id)));
     $row = $stmt->fetch(PDO::FETCH_NUM);
     $bkgnd_id = intval($row[0]);
     $existing_seq = intval($row[1]);
     $card_cant_delete = Stack::decode_bool($row[2]);
     $bkgnd_cant_delete = Stack::decode_bool($row[3]);
     if ($card_cant_delete) {
         CinsImpError::general('Cannot delete protected card');
     }
     /* count the number of cards in the same background;
     		if this is the last card, the background must be deleted too */
     $stmt = $this->file_db->prepare('SELECT COUNT(*) FROM card WHERE bkgnd_id=?');
     $stmt->execute(array(intval($bkgnd_id)));
     $row = $stmt->fetch(PDO::FETCH_NUM);
     $bkgnd_count = intval($row[0]);
     $cleanup_bkgnd = $bkgnd_count == 1;
     if ($cleanup_bkgnd && $bkgnd_cant_delete) {
         CinsImpError::general('Cannot delete last card of protected background');
     }
     /* count the number of cards in the stack;
     		if this is the last card, it cannot be deleted (last card in stack) */
     $stmt = $this->file_db->prepare('SELECT COUNT(*) FROM card');
     $stmt->execute();
     $row = $stmt->fetch(PDO::FETCH_NUM);
     $stack_count = intval($row[0]);
     if ($stack_count == 1) {
         CinsImpError::general('Cannot delete last card of stack');
     }
     /* delete the actual card */
     $stmt = $this->file_db->prepare('DELETE FROM card WHERE id=?');
     $stmt->execute(array(intval($card_id)));
     $stmt = $this->file_db->prepare('DELETE FROM card_data WHERE card_id=?');
     $stmt->execute(array(intval($card_id)));
     $stmt = $this->file_db->prepare('DELETE FROM button WHERE layer_id=?');
     $stmt->execute(array(-intval($card_id)));
     $stmt = $this->file_db->prepare('DELETE FROM field WHERE layer_id=?');
     $stmt->execute(array(-intval($card_id)));
     /* close the gap */
     $stmt = $this->file_db->prepare('UPDATE card SET seq = seq - 1 WHERE seq > ?');
     $stmt->execute(array(intval($existing_seq)));
     /* delete the background if required */
     if ($cleanup_bkgnd) {
         $stmt = $this->file_db->prepare('DELETE FROM bkgnd WHERE id=?');
         $stmt->execute(array($bkgnd_id));
         $stmt = $this->file_db->prepare('DELETE FROM button WHERE layer_id=?');
         $stmt->execute(array($bkgnd_id));
         $stmt = $this->file_db->prepare('DELETE FROM field WHERE layer_id=?');
         $stmt->execute(array($bkgnd_id));
     }
     /* select the card preceeding that which was deleted */
     $stmt = $this->file_db->prepare('SELECT id FROM card WHERE seq=?');
     $stmt->execute(array(intval($existing_seq)));
     $row = $stmt->fetch(PDO::FETCH_NUM);
     if ($row) {
         $next_card_id = intval($row[0]);
     } else {
         $stmt = $this->file_db->prepare('SELECT id FROM card WHERE seq = 1');
         $stmt->execute();
         $row = $stmt->fetch(PDO::FETCH_NUM);
         $next_card_id = intval($row[0]);
     }
     $this->file_db->commit();
     return $next_card_id;
 }