예제 #1
0
 public function view_all()
 {
     $this->output->enable_profiler(true);
     $finder_manager = new Finder_manager('Deck', 'find_with_version_when_created');
     $finder_manager->order_by('deck.id', 'asc');
     $decks = $finder_manager->get();
     $this->layout->add_basic_assets()->menu()->action_view(array('decks' => $decks));
 }
예제 #2
0
 function init_finder_manager($model, $method, $filter = null)
 {
     if ($filter instanceof Finder_manager) {
         return $filter;
     }
     $finder_manager = new Finder_manager($model, $method);
     if (is_numeric($filter)) {
         $finder_manager->set_type(FIND_ONE);
         $finder_manager->where(model_to_table($model) . '.id', $filter);
     } else {
         $finder_manager->order_by(model_to_table($model) . '.id', 'ASC');
     }
     return $finder_manager;
 }
예제 #3
0
파일: Deck.php 프로젝트: vmoulin77/DVB
 /**
  * Find the deck(s) with an extra attribute "contains_current_card"
  * This method is a parametered finder
  * @finder_param id_card The card id used to check for each deck if it contains the card
  * @param $finder_manager
  * @return The deck(s)
  */
 public static function find_with_contains_current_card(Finder_manager $finder_manager)
 {
     $CI = get_instance();
     $parameters = ['id_card'];
     $finder_manager->check_parameters($parameters);
     $id_card = $finder_manager->get_parameter('id_card');
     $decks = self::find();
     foreach ($decks as &$deck) {
         $CI->db->from('card_deck_version')->where('card_deck_version.id_card', $id_card)->where('card_deck_version.id_deck', $deck->id)->where('card_deck_version.is_last', true)->where('card_deck_version.type', 'add');
         if ($CI->db->count_all_results() == 0) {
             $deck->contains_current_card = false;
         } else {
             $deck->contains_current_card = true;
         }
     }
     return $decks;
 }
예제 #4
0
 public function view($id)
 {
     //$this->output->enable_profiler(true);
     $id = (int) $id;
     $this->load->model('Card');
     $data['id'] = $id;
     $card = Card::find($id);
     $card->with_version_when_deleted()->with_card_contents_history();
     foreach ($card->get_card_contents_history() as $card_content) {
         $card_content->with_version();
     }
     $data['card'] = $card;
     $finder_manager = new Finder_manager('Deck', 'find_with_contains_current_card', FIND_MANY, ['id_card' => $id]);
     $decks = $finder_manager->get();
     $data['decks'] = $decks;
     $this->layout->add_basic_assets()->menu()->action_view($data);
 }
예제 #5
0
파일: Card.php 프로젝트: vmoulin77/DVB
 public static function delete($id)
 {
     $CI = get_instance();
     $CI->load->model('Card_move');
     $CI->load->model('Version');
     $CI->load->model('Deck');
     if (self::card_is_deleted($id)) {
         $CI->transaction->set_as_rollback();
         return new Standard_error('DELETE_ERROR', 'The card has already been deleted.');
     }
     if (self::never_versioned($id)) {
         $CI->db->where('id', $id);
         if ($CI->db->delete('card')) {
             return true;
         } else {
             $CI->transaction->set_as_rollback();
             return new Standard_error();
         }
     } else {
         $current_version = Version::retrieve_current_version();
         /********************************************************/
         $CI->db->where('id_card', $id);
         if (!$CI->db->delete('campaign_card')) {
             $CI->transaction->set_as_rollback();
             return new Standard_error();
         }
         /********************************************************/
         /********************************************************/
         $CI->db->select('id_deck')->from('card_deck_version')->where('id_card', $id)->where('id_version', $current_version->get_id())->where('type', 'add');
         $query = $CI->db->get();
         $ids_decks = array();
         foreach ($query->result() as $row) {
             $ids_decks[] = $row->id_deck;
         }
         $CI->db->where('id_card', $id)->where('id_version', $current_version->get_id())->where('type', 'add');
         if (!$CI->db->delete('card_deck_version')) {
             $CI->transaction->set_as_rollback();
             return new Standard_error();
         }
         foreach ($ids_decks as $id_deck) {
             if (!Card_move::set_last_move($id, $id_deck, true)) {
                 $CI->transaction->set_as_rollback();
                 return new Standard_error();
             }
         }
         /********************************************************/
         /********************************************************/
         $finder_manager = new Finder_manager('Deck', 'find_with_contains_current_card', FIND_MANY, ['id_card' => $id]);
         $decks = $finder_manager->get();
         foreach ($decks as $deck) {
             if ($deck->contains_current_card) {
                 if (!Card_move::set_last_move($id, $deck->get_id(), false)) {
                     $CI->transaction->set_as_rollback();
                     return new Standard_error();
                 }
                 $data = array('id_card' => $id, 'id_deck' => $deck->get_id(), 'id_version' => $current_version->get_id(), 'type' => 'remove', 'is_last' => true);
                 if (!$CI->db->insert('card_deck_version', $data)) {
                     $CI->transaction->set_as_rollback();
                     return new Standard_error();
                 }
             }
         }
         /********************************************************/
         $CI->db->where('id_card', $id)->where('id_version', $current_version->get_id());
         if (!$CI->db->delete('card_content')) {
             $CI->transaction->set_as_rollback();
             return new Standard_error();
         }
         $CI->db->select('id')->from('card_content')->where('id_card', $id)->order_by('id_version', 'DESC')->limit(1);
         $query = $CI->db->get();
         if ($query->num_rows() == 0) {
             $CI->transaction->set_as_rollback();
             return new Standard_error();
         } else {
             $row = $query->row();
             $CI->db->set(array('is_last' => true))->where('id', $row->id);
             if (!$CI->db->update('card_content')) {
                 $CI->transaction->set_as_rollback();
                 return new Standard_error();
             }
         }
         $data = array('is_deleted' => true, 'id_version_when_deleted' => $current_version->get_id());
         $CI->db->set($data)->where('id', $id);
         if ($CI->db->update('card')) {
             return true;
         } else {
             $CI->transaction->set_as_rollback();
             return new Standard_error();
         }
     }
 }