load->model('main_cards_model'); } public function index() { $this->cardspage(); } public function cardspage() { $data = array(); $data["page_title"] = "Cards"; $data["form_button"] = "Add"; $data["images"] = array(); $this->load->model('combo_model'); $data['card_order'] = trim($this->input->post('card_order')); $data['background_color'] = trim($this->input->post('background_color')); $data['target_key_value'] = trim($this->input->post('target_key')); $data['card_behavior_value'] = trim($this->input->post('card_behavior')); $data['card_blog_id_value'] = trim($this->input->post('card_blog_id')); $data['card_category_vaue'] = trim($this->input->post('card_category')); $data['card_can_save_value'] = trim($this->input->post('card_can_save')); $data['card_pictures_value'] = trim($this->input->post('card_pictures')); $data['card_status_value'] = trim($this->input->post('card_status')); $data['card_template_value'] = trim($this->input->post('card_template')); $data['card_canexpire_value'] = trim($this->input->post('card_canexpire')); $data['card_notify_value'] = trim($this->input->post('card_notify')); $data['card_country_value'] = trim($this->input->post('card_country')); $data['card_titleshow_value'] = trim($this->input->post('card_titleshow')); //$data['card_timed_value'] = trim($this->input->post('card_timed')); $data['use_short_title_value'] = trim($this->input->post('use_short_title')); $data['card_category_type_value'] = trim($this->input->post('card_category_type')); $data['card_type_value'] = trim($this->input->post('card_type')); // $selected_card['card_type']; $data['card_time_value'] = trim($this->input->post('card_time')); // $selected_card['card_time']; $data['card_location_value'] = trim($this->input->post('card_location')); //$selected_card['card_location']; $data['card_points_value'] = trim($this->input->post('card_points')); //$selected_card['card_location']; $data['card_reciept_value'] = trim($this->input->post('card_reciept')); //$selected_card['card_location']; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if (!empty($card_category)) { $data['card_category_vaue'] = trim($card_category); } else { $card_category = $data['card_category_vaue']; } $data['card_reciept'] = $this->combo_model->getReciept('card_reciept', $data['card_reciept_value']); $data['card_points'] = $this->combo_model->getCardPoint('card_points', $data['card_points_value']); $data['card_type'] = $this->combo_model->getCardCategoryType('card_type', $data['card_type_value']); $data['card_time'] = $this->combo_model->getCardTime('card_time', $data['card_time_value']); $data['card_location'] = $this->combo_model->getCardLocation('card_location', $data['card_location_value']); $data['card_behavior'] = $this->combo_model->getCardBehaveCombo('card_behavior', $data['card_behavior_value']); $data['card_blog_id'] = $this->combo_model->getCardblogIdCombo('card_blog_id', $data['card_blog_id_value']); $data['target_key'] = $this->combo_model->getCardTargetActionCombo('target_key', $data['target_key_value']); $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_vaue']); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); // $data['card_timed'] = $this->combo_model->getYesNoCombo('card_timed', $data['card_timed_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['use_short_title_combo'] = $this->combo_model->getYesNoCombo('use_short_title', $data['use_short_title_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_name'] = trim($this->input->post('card_name')); $data['card_title'] = trim($this->input->post('card_title')); $data['short_title'] = trim($this->input->post('short_title')); $data['description'] = trim($this->input->post('description')); $data['background_picture'] = trim($this->input->post('background_picture')); $data['button1'] = trim($this->input->post('button1')); $data['button1_text'] = trim($this->input->post('button1_text')); $data['button1_action'] = trim($this->input->post('button1_action')); $data['card_expiration'] = trim($this->input->post('card_expiration')); $data['target_text'] = trim($this->input->post('target_text')); $data['long_description'] = trim($this->input->post('long_description')); $data['card_logic'] = trim($this->input->post('card_logic')); // show_area & activity_screen $data['show_area_value'] = trim($this->input->post('show_area')); $data['activity_screen_value'] = trim($this->input->post('activity_screen')); $data['show_area'] = $this->combo_model->getCardShowArea('show_area', $data['show_area_value']); $data['activity_screen'] = $this->combo_model->getCardActivityScreen('activity_screen', $data['activity_screen_value']); // Expiration dropdown $data['expiration_value'] = trim($this->input->post('expiration')); $data['expiration'] = $this->combo_model->getCardExpiration('expiration', $data['expiration_value']); // $in['card_logic'] = $data['card_logic']; // $data['card_points'] = trim($this->input->post('card_points')); // $data['card_reciept'] = trim($this->input->post('card_reciept')); //$data['card_template'] = trim($this->input->post('card_template')); $message = ''; if ($_POST) { $error_ids = []; $id = $this->input->post('id'); if ($id > 0) { $in['action'] = SAVVY_BKO_MAINCARD_UPDATE; $in['id'] = $id; $data["form_button"] = "Update"; $data["card_id"] = $id; } else { $in['action'] = SAVVY_BKO_MAINCARD_CREATE; } //SAVVY_BKO_MAINCARD_UPDATE $in['backoffice'] = 1; $in['member_id'] = 0; // for session testing - not used $in['name'] = $data['card_name']; $in['title'] = $data['card_title']; $in['short_title'] = $data['short_title']; $in['description'] = $data['description']; $in['long_description'] = $data['long_description']; $in['background_picture'] = $data['card_pictures_value']; $in['button1'] = $data['button1']; $in['button1_text'] = $data['button1_text']; $in['button1_action'] = $data['card_category_vaue']; // note category drives this action $in['status'] = (int) $data['card_status_value']; $in['can_save'] = (int) $data['card_can_save_value']; $in['template'] = (int) $data['card_template_value']; $in['card_canexpire'] = (int) $data['card_canexpire_value']; $in['card_expiration'] = $data['card_expiration']; $in['card_notify'] = (int) $data['card_notify_value']; $in['titleshow'] = (int) $data['card_titleshow_value']; $in['target_text'] = $data['target_text']; $in['target_key'] = $data['target_key_value']; $in['card_behavior'] = $data['card_behavior_value']; $in['use_short_title'] = $data['use_short_title_value']; $in['card_type'] = $data['card_type_value']; $in['card_time'] = $data['card_time_value']; $in['card_location'] = $data['card_location_value']; $in['card_points'] = $data['card_points_value']; $in['card_reciept'] = $data['card_reciept_value']; $in['card_logic'] = $data['card_logic']; //$in["card_country"] = $data["card_country"]; $in['card_country'] = $data['card_country_value']; $in['card_order'] = (int) $data['card_order']; $in['background_color'] = strtoupper($data['background_color']); $in['blog_id'] = $data['card_blog_id_value']; $in['activity_screen'] = (int)$data['activity_screen_value']; $in['show_area'] = (int)$data['show_area_value']; $in['expiration'] = (int)$data['expiration_value']; //print_r($in); if ($in['card_logic'] != '') { // if ( verifyCardLogic()) // { // // $message .= "
Invalid or Duplicate Logic in use"; // } } if ($in['blog_id'] === '') { $message .= "
Blog Article ID incorrect"; $error_ids[] = 'card_blog_id'; } if ($in['card_behavior'] === '') { $message .= "
Card Behavior incorrect"; $error_ids[] = 'card_behavior'; } if ($in['name'] == '' || strlen($in['name']) > 100) { $message .= "
Incorrect Card ID"; $error_ids[] = 'cardName'; } if ($in['title'] == '' || strlen($in['title']) > 100) { $message .= "
Invalid title"; $error_ids[] = 'cardTitle'; } if ($in['short_title'] == '' || strlen($in['short_title']) > 35) { $message .= "
Invalid short title"; $error_ids[] ='cardShortTitle'; } if ($in['description'] == '' || strlen($in['description']) > 250) { $message .= "
Invalid description"; $error_ids[] ='description'; } if ( $in['background_picture'] == '' || strlen($in['background_picture']) > 150 ) { if($in['template']== self::TEMPLATE_ACTIVE_TIP){ // Active tip don't use picture but API require it => get default value $in['background_picture'] = $this->main_cards_model->getDefaultCardPictureValue(); // Validate background color require for Active Tip if(empty($in['background_color'])){ $message .= "
Invalid background color - please input background color for Active Tip"; } }else{ $message .= "
Invalid background picture"; } } if ($in['button1'] == '' || strlen($in['button1']) > 35) { $message .= "
Invalid button1"; $error_ids[] ='button1'; } if ($in['button1_text'] == '' || strlen($in['button1_text']) > 35) { $message .= "
Invalid button1 text"; $error_ids[] ='button1_text'; } if ($in['button1_action'] == '' || strlen($in['button1_action']) > 15) { $message .= "
Invalid category"; } if ($data['card_canexpire_value'] != '' && $data['card_canexpire_value'] == 1 && ($data['card_expiration'] == '' || strtotime($data['card_expiration']) < time())) { $message .= "
Invalid expiration date"; } $success = false; if ($message == '') { $out = array(); $ret = $this->savvy_api($in, $out); if ($ret == PHP_API_OK) { $message = $id > 0 ? 'Updated!' : 'Created!'; $success = true; } else { $message = 'Failed to ' . ($id > 0 ? 'update' : 'create') . ' card: ' . isset($out["status"]) ? $out["status"] : ''; } } $response = array( 'success' => $success, 'message' => $message, 'error_ids' => $error_ids, 'fragments' => array( 'id' => $id, 'html' => $this->refresh_card_items( $in ) ) ); if ( $this->input->is_ajax_request() ) { return $this->output ->set_content_type('application/json') ->set_output( json_encode( $response ) ); } } else { $in['card_expiration'] = date("Y-m-d", strtotime("+3 months")); } $data['message'] = $message; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $params = $this->input->get(); $params['card_category'] = $card_category; $data['cart_filter_by_selectbox'] = $this->getCardFilterByFields('filter_name', $params['filter_name'] ?? ''); $this->load->library('table'); $this->table->set_heading( ['data' => 'View', 'style' => 'width:50px'], 'Card', ['data' => 'Image', 'style' => 'width:120px'], ['data' => 'Country', 'style' => 'width:120px'] ); $query = $this->main_cards_model->getCardsQuery($params); $tableData = $this->returnAdminTable( [ 'count_query' => $query, 'query' => $query, ], '/cards/cardspage/' . $card_category . '/', [ 'per_page' => 6, 'reuse_query_string' => TRUE, 'uri_segment' => 4, ] ); $data['filterData'] = $params; $data['card_table'] = $tableData['output_table']; $data['links'] = $tableData['links']; $this->renderCardPage('view_cards', $data); } public function cardorder() { $data = array(); $data["page_title"] = "Cards Order"; $data["form_button"] = "Add"; $data["images"] = array(); $this->load->model('combo_model'); $data['card_order'] = trim($this->input->post('card_order')); $data['card_category_vaue'] = trim($this->input->post('card_category')); $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if (!empty($card_category)) { $data['card_category_vaue'] = trim($card_category); } else { $card_category = $data['card_category_vaue']; } $data['card_category'] = $this->combo_model->getCardCategoryComboAll('card_category', $data['card_category_vaue']); $message = ''; $data['message'] = $message; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $params = $this->input->get(); $params['card_category'] = $card_category; $data['cart_filter_by_selectbox'] = $this->getCardFilterByFields('filter_name', $params['filter_name'] ?? ''); $this->load->library('table'); $this->table->set_heading( ['data' => 'Card Order', 'style' => 'width:150px'], ['data' => 'Card Id', 'style' => 'width:50px'], 'Card', ['data' => 'Image', 'style' => 'width:120px'], ['data' => 'Country', 'style' => 'width:120px'] ); $query = $this->main_cards_model->getCardsOrderQuery($params); $tableData = $this->returnAdminTable( [ 'count_query' => $query, 'query' => $query, ], '/cards/cardorder/' . $card_category . '/', [ 'per_page' => 15, 'reuse_query_string' => TRUE, 'uri_segment' => 4, ] ); $data['filterData'] = $params; $data['card_table'] = $tableData['output_table']; $data['links'] = $tableData['links']; $this->renderCardPage('view_cardorder', $data); } //dynamic_card_table public function dynamiccards() { $data = array(); $this->load->library( 'table' ); $this->table->set_template( $this->template ); $data["page_title"] = "Dynamic Cards"; $mysql = "SELECT dynamic_key,name,title, CASE WHEN (SELECT COUNT(*) FROM members_notification as mn WHERE mn.trigger_key = name and mn.notice_type='INSTANT')>0 THEN 'Yes' ELSE 'No' END AS Instant, '' AS Release , '' AS View from main_cards where dynamic_key IS NOT NULL "; $query = $this->read_replica->query( $mysql ); $data["dynamic_card_table"] = $this->table->generate( $query ); $this->renderCardPage('view_dynamiccards', $data); } public function dynamiccards_retired() { $data = array(); $data["page_title"] = "Dynamic Cards"; $data["form_button"] = "Add"; $data["images"] = array(); $this->load->model('combo_model'); $data['card_order'] = trim($this->input->post('card_order')); $data['background_color'] = trim($this->input->post('background_color')); $data['card_behavior_value'] = trim($this->input->post('card_behavior')); $data['card_blog_id_value'] = trim($this->input->post('card_blog_id')); $data['multiple_answer_value'] = trim($this->input->post('multiple_answer')); $data['card_category_value'] = trim($this->input->post('card_category')); $data['card_can_save_value'] = trim($this->input->post('card_can_save')); $data['card_pictures_value'] = trim($this->input->post('card_pictures')); $data['card_status_value'] = trim($this->input->post('card_status')); $data['card_template_value'] = trim($this->input->post('card_template')); $data['card_canexpire_value'] = trim($this->input->post('card_canexpire')); $data['card_notify_value'] = trim($this->input->post('card_notify')); $data['card_country_value'] = trim($this->input->post('card_country')); $data['card_titleshow_value'] = trim($this->input->post('card_titleshow')); $data['use_short_title_value'] = trim($this->input->post('use_short_title')); $data['card_type_value'] = trim($this->input->post('card_type')); // $selected_card['card_type']; $data['card_time_value'] = trim($this->input->post('card_time')); // $selected_card['card_time']; $data['card_location_value'] = trim($this->input->post('card_location')); //$selected_card['card_location']; $data['card_points_value'] = trim($this->input->post('card_points')); //$selected_card['card_location']; $data['card_reciept_value'] = trim($this->input->post('card_reciept')); //$selected_card['card_location']; $data['card_logic'] = trim($this->input->post('card_logic')); //$selected_card['card_location']; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if (!empty($card_category)) { $data['card_category_value'] = trim($card_category); } else { $card_category = $data['card_category_value']; } $data['card_reciept'] = $this->combo_model->getReciept('card_reciept', $data['card_reciept_value']); $data['card_points'] = $this->combo_model->getCardPoint('card_points', $data['card_points_value']); $card_category = 'CARDDYNAMIC'; $data['card_behavior'] = $this->combo_model->getCardBehaveCombo('card_behavior', $data['card_behavior_value']); $data['card_blog_id'] = $this->combo_model->getCardblogIdCombo('card_blog_id', $data['card_blog_id_value']); $data['multiple_answer'] = $this->combo_model->getYesNoCombo('multiple_answer', $data['multiple_answer_value']); $data['card_type'] = $this->combo_model->getCardCategoryType('card_type', $data['card_type_value']); $data['card_time'] = $this->combo_model->getCardTime('card_time', $data['card_time_value']); $data['card_location'] = $this->combo_model->getCardLocation('card_location', $data['card_location_value']); $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_value'], 'CARDDYNAMIC'); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getSurveyCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['use_short_title_combo'] = $this->combo_model->getYesNoCombo('use_short_title', $data['use_short_title_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_name'] = trim($this->input->post('card_name')); $data['card_title'] = trim($this->input->post('card_title')); $data['short_title'] = trim($this->input->post('short_title')); $data['description'] = trim($this->input->post('description')); $data['long_description'] = trim($this->input->post('long_description')); $data['background_picture'] = trim($this->input->post('background_picture')); $data['button1'] = trim($this->input->post('button1')); $data['button1_text'] = trim($this->input->post('button1_text')); $data['button1_action'] = trim($this->input->post('button1_action')); $data['card_expiration'] = trim($this->input->post('card_expiration')); $data['card_logic'] = trim($this->input->post('card_logic')); //$data['card_template'] = trim($this->input->post('card_template')); $message = ''; if ($_POST) { $id = $this->input->post('id'); if ($id > 0) { $in['action'] = SAVVY_BKO_MAINCARD_UPDATE; $in['id'] = $id; $data["form_button"] = "Update"; $data["card_id"] = $id; } else { $in['action'] = SAVVY_BKO_MAINCARD_CREATE; } //SAVVY_BKO_MAINCARD_UPDATE $in['backoffice'] = 1; $in['member_id'] = 0; // for session testing - not used $in['name'] = $data['card_name']; $in['title'] = $data['card_title']; $in['short_title'] = $data['short_title']; $in['description'] = $data['description']; $in['long_description'] = $data['long_description']; $in['card_logic'] = $data['card_logic']; $in['background_picture'] = $data['card_pictures_value']; $in['button1'] = $data['button1']; $in['button1_text'] = $data['button1_text']; $in['button1_action'] = $data['card_category_value']; // note category drives this action $in['status'] = (int) $data['card_status_value']; $in['can_save'] = (int) $data['card_can_save_value']; $in['template'] = (int) $data['card_template_value']; $in['card_canexpire'] = (int) $data['card_canexpire_value']; $in['card_expiration'] = $data['card_expiration']; $in['card_notify'] = (int) $data['card_notify_value']; $in['titleshow'] = (int) $data['card_titleshow_value']; $in['multiple_answer'] = (int) $data['multiple_answer']; $in['card_behavior'] = $data['card_behavior_value']; $in['blog_id'] = $data['card_blog_id_value']; $in['use_short_title'] = $data['use_short_title_value']; $in['card_type'] = $data['card_type_value']; $in['card_time'] = $data['card_time_value']; $in['card_location'] = $data['card_location_value']; $in['card_points'] = $data['card_points_value']; $in['card_reciept'] = $data['card_reciept_value']; // $in["card_country"] = $data["card_country"]; $in['card_country'] = $data['card_country_value']; // $in['target_text'] = ""; // $in['card_target'] = ""; $in['card_order'] = (int) $data['card_order']; $in['background_color'] = strtoupper($data['background_color']); if ($in['name'] == '' || strlen($in['name']) > 100) { $message .= "
Invalid name"; } if ($in['title'] == '' || strlen($in['title']) > 100) { $message .= "
Invalid title"; } if ($in['short_title'] == '' || strlen($in['short_title']) > 35) { $message .= "
Invalid short title"; } if ($in['description'] == '' || strlen($in['description']) > 250) { $message .= "
Invalid description"; } if ($in['background_picture'] == '' || strlen($in['background_picture']) > 150) { $message .= "
Invalid background picture"; } if ($in['button1'] == '' || strlen($in['button1']) > 35) { $message .= "
Invalid button1"; } if ($in['button1_text'] == '' || strlen($in['button1_text']) > 35) { $message .= "
Invalid button1 text"; } if ($in['button1_action'] == '' || strlen($in['button1_action']) > 15) { $message .= "
Invalid category"; } if ($data['card_canexpire_value'] != '' && $data['card_canexpire_value'] == 1 && ($data['card_expiration'] == '' || strtotime($data['card_expiration']) < time())) { $message .= "
Invalid expiration date"; } if ($message == '') { $out = array(); $ret = $this->savvy_api($in, $out); if ($ret == PHP_API_OK) { $message = $id > 0 ? 'Updated!' : 'Created!'; } else { $message = 'Failed to ' . ($id > 0 ? 'update' : 'create') . ' card: ' . $out["status"]; } } } else { $in['card_expiration'] = date("Y-m-d", strtotime("+3 months")); } $data['message'] = $message; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $card_category = 'CARDDYNAMIC'; $params = $this->input->get(); $params['card_category'] = $card_category; $custom_filter_options = [ [ "id" => 'name', "name" => 'Card ID', ], [ "id" => 'title', "name" => 'Question', ], [ "id" => 'description', "name" => 'Answers Options', ], ]; $data['cart_filter_by_selectbox'] = $this->getCardFilterByFields('filter_name', $params['filter_name'] ?? '', $custom_filter_options); $this->load->library('table'); $this->table->set_heading( 'Detail', ['data' => 'Image', 'style' => 'width:50px'], ['data' => 'Image', 'style' => 'width:120px'] ); $query = $this->main_cards_model->getDynamicCardsQuery($params); $tableData = $this->returnAdminTable( [ 'count_query' => $query, 'query' => $query, ], '/cards/dynamiccards/' . $card_category . '/', [ 'per_page' => 6, 'reuse_query_string' => TRUE, 'uri_segment' => 4, ] ); $data['filterData'] = $params; $data['card_table'] = $tableData['output_table']; $data['links'] = $tableData['links']; $this->renderCardPage('view_dynamiccards', $data); } public function surveycards() { $data = array(); $data["page_title"] = "Survey Cards"; $data["form_button"] = "Add"; $data["images"] = array(); $this->load->model('combo_model'); $data['card_order'] = trim($this->input->post('card_order')); $data['background_color'] = trim($this->input->post('background_color')); $data['card_behavior_value'] = trim($this->input->post('card_behavior')); $data['card_blog_id_value'] = trim($this->input->post('card_blog_id')); $data['multiple_answer_value'] = trim($this->input->post('multiple_answer')); $data['card_category_value'] = trim($this->input->post('card_category')); $data['card_can_save_value'] = trim($this->input->post('card_can_save')); $data['card_pictures_value'] = trim($this->input->post('card_pictures')); $data['card_status_value'] = trim($this->input->post('card_status')); $data['card_template_value'] = trim($this->input->post('card_template')); $data['card_canexpire_value'] = trim($this->input->post('card_canexpire')); $data['card_notify_value'] = trim($this->input->post('card_notify')); $data['card_country_value'] = trim($this->input->post('card_country')); $data['card_titleshow_value'] = trim($this->input->post('card_titleshow')); $data['use_short_title_value'] = trim($this->input->post('use_short_title')); $data['card_type_value'] = trim($this->input->post('card_type')); // $selected_card['card_type']; $data['card_time_value'] = trim($this->input->post('card_time')); // $selected_card['card_time']; $data['card_location_value'] = trim($this->input->post('card_location')); //$selected_card['card_location']; $data['card_points_value'] = trim($this->input->post('card_points')); //$selected_card['card_location']; $data['card_reciept_value'] = trim($this->input->post('card_reciept')); //$selected_card['card_location']; $data['card_logic'] = trim($this->input->post('card_logic')); //$selected_card['card_location']; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if (!empty($card_category)) { $data['card_category_value'] = trim($card_category); } else { $card_category = $data['card_category_value']; } $data['card_reciept'] = $this->combo_model->getReciept('card_reciept', $data['card_reciept_value']); $data['card_points'] = $this->combo_model->getCardPoint('card_points', $data['card_points_value']); $card_category = 'SURVEYA'; $data['card_behavior'] = $this->combo_model->getCardBehaveCombo('card_behavior', $data['card_behavior_value']); $data['card_blog_id'] = $this->combo_model->getCardblogIdCombo('card_blog_id', $data['card_blog_id_value']); $data['multiple_answer'] = $this->combo_model->getYesNoCombo('multiple_answer', $data['multiple_answer_value']); $data['card_type'] = $this->combo_model->getCardCategoryType('card_type', $data['card_type_value']); $data['card_time'] = $this->combo_model->getCardTime('card_time', $data['card_time_value']); $data['card_location'] = $this->combo_model->getCardLocation('card_location', $data['card_location_value']); $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_value'], 'SURVEYA'); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getSurveyCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['use_short_title_combo'] = $this->combo_model->getYesNoCombo('use_short_title', $data['use_short_title_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_name'] = trim($this->input->post('card_name')); $data['card_title'] = trim($this->input->post('card_title')); $data['short_title'] = trim($this->input->post('short_title')); $data['description'] = trim($this->input->post('description')); $data['long_description'] = trim($this->input->post('long_description')); $data['background_picture'] = trim($this->input->post('background_picture')); $data['button1'] = trim($this->input->post('button1')); $data['button1_text'] = trim($this->input->post('button1_text')); $data['button1_action'] = trim($this->input->post('button1_action')); $data['card_expiration'] = trim($this->input->post('card_expiration')); $data['card_logic'] = trim($this->input->post('card_logic')); //$data['card_template'] = trim($this->input->post('card_template')); // show_area & activity_screen $data['show_area_value'] = trim($this->input->post('show_area')); $data['activity_screen_value'] = trim($this->input->post('activity_screen')); $data['show_area'] = $this->combo_model->getCardShowArea('show_area', $data['show_area_value']); $data['activity_screen'] = $this->combo_model->getCardActivityScreen('activity_screen', $data['activity_screen_value']); $message = ''; if ($_POST) { $id = $this->input->post('id'); if ($id > 0) { $in['action'] = SAVVY_BKO_MAINCARD_UPDATE; $in['id'] = $id; $data["form_button"] = "Update"; $data["card_id"] = $id; } else { $in['action'] = SAVVY_BKO_MAINCARD_CREATE; } //SAVVY_BKO_MAINCARD_UPDATE $in['backoffice'] = 1; $in['member_id'] = 0; // for session testing - not used $in['name'] = $data['card_name']; $in['title'] = $data['card_title']; $in['short_title'] = $data['short_title']; $in['description'] = $data['description']; $in['long_description'] = $data['long_description']; $in['card_logic'] = $data['card_logic']; $in['background_picture'] = $data['card_pictures_value']; $in['button1'] = $data['button1']; $in['button1_text'] = $data['button1_text']; $in['button1_action'] = $data['card_category_value']; // note category drives this action $in['status'] = (int) $data['card_status_value']; $in['can_save'] = (int) $data['card_can_save_value']; $in['template'] = (int) $data['card_template_value']; $in['card_canexpire'] = (int) $data['card_canexpire_value']; $in['card_expiration'] = $data['card_expiration']; $in['card_notify'] = (int) $data['card_notify_value']; $in['titleshow'] = (int) $data['card_titleshow_value']; $in['multiple_answer'] = (int) $data['multiple_answer']; $in['card_behavior'] = $data['card_behavior_value']; $in['blog_id'] = $data['card_blog_id_value']; $in['use_short_title'] = $data['use_short_title_value']; $in['card_type'] = $data['card_type_value']; $in['card_time'] = $data['card_time_value']; $in['card_location'] = $data['card_location_value']; $in['card_points'] = $data['card_points_value']; $in['card_reciept'] = $data['card_reciept_value']; // $in["card_country"] = $data["card_country"]; $in['card_country'] = $data['card_country_value']; // $in['target_text'] = ""; // $in['card_target'] = ""; $in['card_order'] = (int) $data['card_order']; $in['background_color'] = strtoupper($data['background_color']); $in['activity_screen'] = (int)$data['activity_screen_value']; $in['show_area'] = (int)$data['show_area_value']; if ($in['name'] == '' || strlen($in['name']) > 100) { $message .= "
Invalid name"; } if ($in['title'] == '' || strlen($in['title']) > 100) { $message .= "
Invalid title"; } if ($in['short_title'] == '' || strlen($in['short_title']) > 35) { $message .= "
Invalid short title"; } if ($in['description'] == '' || strlen($in['description']) > 250) { $message .= "
Invalid description"; } if ($in['background_picture'] == '' || strlen($in['background_picture']) > 150) { $message .= "
Invalid background picture"; } if ($in['button1'] == '' || strlen($in['button1']) > 35) { $message .= "
Invalid button1"; } if ($in['button1_text'] == '' || strlen($in['button1_text']) > 35) { $message .= "
Invalid button1 text"; } if ($in['button1_action'] == '' || strlen($in['button1_action']) > 15) { $message .= "
Invalid category"; } if ($data['card_canexpire_value'] != '' && $data['card_canexpire_value'] == 1 && ($data['card_expiration'] == '' || strtotime($data['card_expiration']) < time())) { $message .= "
Invalid expiration date"; } if ($message == '') { $out = array(); $ret = $this->savvy_api($in, $out); if ($ret == PHP_API_OK) { $message = $id > 0 ? 'Updated!' : 'Created!'; } else { $message = 'Failed to ' . ($id > 0 ? 'update' : 'create') . ' card: ' . $out["status"]; } } } else { $in['card_expiration'] = date("Y-m-d", strtotime("+3 months")); } $data['message'] = $message; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $card_category = 'SURVEYA'; $params = $this->input->get(); $params['card_category'] = $card_category; $custom_filter_options = [ [ "id" => 'name', "name" => 'Card ID', ], [ "id" => 'title', "name" => 'Question', ], [ "id" => 'description', "name" => 'Answers Options', ], ]; $data['cart_filter_by_selectbox'] = $this->getCardFilterByFields('filter_name', $params['filter_name'] ?? '', $custom_filter_options); $this->load->library('table'); $this->table->set_heading( ['data' => 'View', 'style' => 'width:50px'], 'Card', ['data' => 'Image', 'style' => 'width:120px'] ); $query = $this->main_cards_model->getSurveyCardsQuery($params); $tableData = $this->returnAdminTable( [ 'count_query' => $query, 'query' => $query, ], '/cards/surveycards/' . $card_category . '/', [ 'per_page' => 6, 'reuse_query_string' => TRUE, 'uri_segment' => 4, ] ); $data['filterData'] = $params; $data['card_table'] = $tableData['output_table']; $data['links'] = $tableData['links']; $this->renderCardPage('view_surveycards', $data); } public function deletedcards() { $data = array(); $data["page_title"] = "Deleted Cards"; $data["form_button"] = "Add"; $data["images"] = array(); $this->load->model('combo_model'); $data['card_category_vaue'] = trim($this->input->post('card_category')); $data['card_can_save_value'] = trim($this->input->post('card_can_save')); $data['card_pictures_value'] = trim($this->input->post('card_pictures')); $data['card_status_value'] = trim($this->input->post('card_status')); $data['card_template_value'] = trim($this->input->post('card_template')); $data['card_canexpire_value'] = trim($this->input->post('card_canexpire')); $data['card_notify_value'] = trim($this->input->post('card_notify')); $data['card_country_value'] = trim($this->input->post('card_country')); $data['card_titleshow_value'] = trim($this->input->post('card_titleshow')); $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if (!empty($card_category)) { $data['card_category_vaue'] = trim($card_category); } else { $card_category = $data['card_category_vaue']; } $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_vaue']); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_name'] = trim($this->input->post('card_name')); $data['card_title'] = trim($this->input->post('card_title')); $data['short_title'] = trim($this->input->post('short_title')); $data['description'] = trim($this->input->post('description')); $data['background_picture'] = trim($this->input->post('background_picture')); $data['button1'] = trim($this->input->post('button1')); $data['button1_text'] = trim($this->input->post('button1_text')); $data['button1_action'] = trim($this->input->post('button1_action')); $data['card_expiration'] = trim($this->input->post('card_expiration')); //$data['card_template'] = trim($this->input->post('card_template')); $message = ''; $data['message'] = $message; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $params = $this->input->get(); $params['card_category'] = $card_category; $data['cart_filter_by_selectbox'] = $this->getCardFilterByFields('filter_name', $params['filter_name'] ?? ''); $this->load->library('table'); $this->table->set_heading( ['data' => 'View', 'style' => 'width:50px'], 'Card', ['data' => 'Image', 'style' => 'width:120px'] ); $query = $this->main_cards_model->getDeletedCardsQuery($params); $tableData = $this->returnAdminTable( [ 'count_query' => $query, 'query' => $query, ], '/cards/deletedcards/' . $card_category . '/', [ 'per_page' => 6, 'reuse_query_string' => TRUE, 'uri_segment' => 4, ] ); $data['filterData'] = $params; $data['card_table'] = $tableData['output_table']; $data['links'] = $tableData['links']; $this->renderCardPage('view_deletedcards', $data); } public function editSurveycard() { $data = array(); $card_id = $this->input->get('card_id'); if ($card_id != '' && $card_id > 0) { $mysql = "SELECT * FROM main_cards WHERE id = $card_id"; $query = $this->read_replica->query($mysql); $selected_card = $query->row_array(); $data["images"] = array(); $data["form_button"] = "Update"; $this->load->model('combo_model'); $card_category = 'SURVEYA'; $data['card_category_value'] = $card_category; $data['card_behavior_value'] = $selected_card['card_behavior']; $data['card_blog_id_value'] = $selected_card['blog_id']; $data['card_can_save_value'] = 0; //$selected_card['can_save']; $data['multiple_answer_value'] = $selected_card['multiple_answer']; $data['card_pictures_value'] = $selected_card['background_picture']; $data['card_status_value'] = $selected_card['status']; $data['card_template_value'] = $selected_card['template']; $data['card_canexpire_value'] = $selected_card['card_canexpire']; $data['card_type_value'] = $selected_card['card_type']; $data['card_time_value'] = $selected_card['card_time']; $data['card_location_value'] = $selected_card['card_location']; $data['card_logic'] = $selected_card['card_logic']; $data['card_notify_value'] = $selected_card['notify']; $data['card_country_value'] = $selected_card['card_country']; $data['card_titleshow_value'] = $selected_card['titleshow']; $data['card_category'] = $card_category; $data['card_can_save'] = 0; $data['card_points_value'] = $selected_card['card_points']; $data['card_reciept_value'] = $selected_card['card_reciept']; // show_area & activity_screen $data['show_area_value'] = $selected_card['show_area']; $data['activity_screen_value'] = $selected_card['activity_screen']; $data['show_area'] = $this->combo_model->getCardShowArea('show_area', $data['show_area_value']); $data['activity_screen'] = $this->combo_model->getCardActivityScreen('activity_screen', $data['activity_screen_value']); $data['card_reciept'] = $this->combo_model->getReciept('card_reciept', $data['card_reciept_value']); $data['card_points'] = $this->combo_model->getCardPoint('card_points', $data['card_points_value']); $data['multiple_answer'] = $this->combo_model->getYesNoCombo('multiple_answer', $data['multiple_answer_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getSurveyCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_behavior'] = $this->combo_model->getCardBehaveCombo('card_behavior', $data['card_behavior_value']); $data['card_blog_id'] = $this->combo_model->getCardblogIdCombo('card_blog_id', $data['card_blog_id_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_type'] = $this->combo_model->getCardCategoryType('card_type', $data['card_type_value']); $data['card_time'] = $this->combo_model->getCardTime('card_time', $data['card_time_value']); $data['card_location'] = $this->combo_model->getCardLocation('card_location', $data['card_location_value']); $data['use_short_title_value'] = $selected_card['use_short_title']; $data['use_short_title_combo'] = $this->combo_model->getYesNoCombo('use_short_title', $data['use_short_title_value']); $data['card_name'] = $selected_card['name']; $data['card_title'] = $selected_card['title']; $data['short_title'] = $selected_card['short_title']; $data['description'] = $selected_card['description']; $data['background_picture'] = $selected_card['background_picture']; $data['button1'] = $selected_card['button1']; $data['button1_text'] = $selected_card['button1_text']; $data['button1_action'] = $selected_card['button1_action']; $data['card_expiration'] = $selected_card['card_expiration']; $data['long_description'] = $selected_card['long_description']; $data['card_order'] = $selected_card['card_order']; $data['background_color'] = $selected_card['background_color']; $data['card_id'] = $card_id; $this->load->view('cards/common/card_surveyform', $data); } } public function editcard() { $data = array(); $card_id = $this->input->get('card_id'); if ($card_id != '' && $card_id > 0) { $mysql = "SELECT * FROM main_cards WHERE id = $card_id"; $query = $this->read_replica->query($mysql); $selected_card = $query->row_array(); $data["images"] = array(); $data["form_button"] = "Update"; $this->load->model('combo_model'); $data['target_key_value'] = $selected_card['target_key']; $data['card_behavior_value'] = $selected_card['card_behavior']; $data['card_blog_id_value'] = $selected_card['blog_id']; $data['card_category_value'] = $selected_card['button1_action']; $data['card_can_save_value'] = $selected_card['can_save']; $data['card_pictures_value'] = $selected_card['background_picture']; $data['card_status_value'] = $selected_card['status']; $data['card_template_value'] = $selected_card['template']; $data['card_canexpire_value'] = $selected_card['card_canexpire']; $data['card_notify_value'] = $selected_card['notify']; $data['card_country_value'] = $selected_card['card_country']; $data['card_type_value'] = $selected_card['card_type']; $data['card_time_value'] = $selected_card['card_time']; $data['card_location_value'] = $selected_card['card_location']; $data['card_logic'] = $selected_card['card_logic']; $data['card_titleshow_value'] = $selected_card['titleshow']; $data['card_points_value'] = $selected_card['card_points']; $data['card_reciept_value'] = $selected_card['card_reciept']; // show_area & activity_screen $data['show_area_value'] = $selected_card['show_area']; $data['activity_screen_value'] = $selected_card['activity_screen']; $data['show_area'] = $this->combo_model->getCardShowArea('show_area', $data['show_area_value']); $data['activity_screen'] = $this->combo_model->getCardActivityScreen('activity_screen', $data['activity_screen_value']); //Expiration $data['expiration_value'] = $selected_card['expiration']; $data['expiration'] = $this->combo_model->getCardExpiration('expiration', $data['expiration_value']); $data['card_reciept'] = $this->combo_model->getReciept('card_reciept', $data['card_reciept_value']); $data['card_points'] = $this->combo_model->getCardPoint('card_points', $data['card_points_value']); $data['target_key'] = $this->combo_model->getCardTargetActionCombo('target_key', $data['target_key_value']); $data['card_behavior'] = $this->combo_model->getCardBehaveCombo('card_behavior', $data['card_behavior_value']); $data['card_blog_id'] = $this->combo_model->getCardblogIdCombo('card_blog_id', $data['card_blog_id_value']); $data['use_short_title_value'] = $selected_card['use_short_title']; $data['use_short_title_combo'] = $this->combo_model->getYesNoCombo('use_short_title', $data['use_short_title_value']); $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_value']); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); // active tip don't use picture $card_pictures_value = $data['card_pictures_value']; if($selected_card['template'] == self::TEMPLATE_ACTIVE_TIP){ $card_pictures_value = ''; } $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $card_pictures_value); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_type'] = $this->combo_model->getCardCategoryType('card_type', $data['card_type_value']); $data['card_time'] = $this->combo_model->getCardTime('card_time', $data['card_time_value']); $data['card_location'] = $this->combo_model->getCardLocation('card_location', $data['card_location_value']); $data['card_name'] = $selected_card['name']; $data['card_title'] = $selected_card['title']; $data['short_title'] = $selected_card['short_title']; $data['description'] = $selected_card['description']; $data['long_description'] = $selected_card['long_description']; $data['background_picture'] = $selected_card['background_picture']; $data['button1'] = $selected_card['button1']; $data['button1_text'] = $selected_card['button1_text']; $data['button1_action'] = $selected_card['button1_action']; $data['card_expiration'] = $selected_card['card_expiration']; $data['target_text'] = $selected_card['target_text']; $data['card_order'] = $selected_card['card_order']; $data['background_color'] = $selected_card['background_color']; $data["dynamic_key"] = $selected_card['dynamic_key']; $data['card_id'] = $card_id; $data['TEMPLATE_ACTIVE_TIP'] = self::TEMPLATE_ACTIVE_TIP; $this->load->view('cards/common/card_form', $data); } } public function generalcards() { $this->load->library('table'); $this->table->set_template($this->template); //echo ""; $data = array(); $data["page_title"] = "Cards"; $data["form_button"] = "Add"; $data["images"] = array(); $this->load->model('combo_model'); $data['card_category_vaue'] = trim($this->input->post('card_category')); $data['card_can_save_value'] = trim($this->input->post('card_can_save')); $data['card_pictures_value'] = trim($this->input->post('card_pictures')); $data['card_status_value'] = trim($this->input->post('card_status')); $data['card_template_value'] = trim($this->input->post('card_template')); $data['card_canexpire_value'] = trim($this->input->post('card_canexpire')); $data['card_notify_value'] = trim($this->input->post('card_notify')); $data['card_country_value'] = trim($this->input->post('card_country')); $data['card_titleshow_value'] = trim($this->input->post('card_titleshow')); $data['card_blog_id_value'] = trim($this->input->post('card_blog_id')); $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if ($card_category != '' && $card_category != '0') { $data['card_category_vaue'] = trim($card_category); } else { $card_category = $data['card_category_vaue']; } $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_vaue']); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_name'] = trim($this->input->post('card_name')); $data['card_title'] = trim($this->input->post('card_title')); $data['short_title'] = trim($this->input->post('short_title')); $data['description'] = trim($this->input->post('description')); $data['background_picture'] = trim($this->input->post('background_picture')); $data['button1'] = trim($this->input->post('button1')); $data['button1_text'] = trim($this->input->post('button1_text')); $data['button1_action'] = trim($this->input->post('button1_action')); $data['card_expiration'] = trim($this->input->post('card_expiration')); $data['blog_id'] = $this->combo_model->getCardblogIdCombo('card_blog_id', $data['card_blog_id_value']); //$data['card_template'] = trim($this->input->post('card_template')); //print_r($data); $data['card_order'] = trim($this->input->post('card_order')); $data['background_color'] = trim($this->input->post('background_color')); $message = ''; if ($_POST) { $id = $this->input->post('id'); if ($id > 0) { $in['action'] = SAVVY_BKO_MAINCARD_UPDATE; $in['id'] = $id; $data["form_button"] = "Update"; $data["card_id"] = $id; } else { $in['action'] = SAVVY_BKO_MAINCARD_CREATE; } //SAVVY_BKO_MAINCARD_UPDATE $in['name'] = $data['card_name']; $in['title'] = $data['card_title']; $in['short_title'] = $data['short_title']; $in['description'] = $data['description']; $in['background_picture'] = $data['card_pictures_value']; $in['button1'] = $data['button1']; $in['button1_text'] = $data['button1_text']; $in['button1_action'] = $data['card_category_vaue']; // note category drives this action $in['status'] = (int) $data['card_status_value']; $in['can_save'] = (int) $data['card_can_save_value']; $in['template'] = (int) $data['card_template_value']; $in['card_canexpire'] = (int) $data['card_canexpire_value']; $in['card_expiration'] = $data['card_expiration']; $in['card_notify'] = (int) $data['card_notify_value']; $in['titleshow'] = (int) $data['card_titleshow_value']; $in['card_country'] = $data['card_country_value']; $in['blog_id'] = $data['blog_id']; $in['card_order'] = $data['card_order']; $in['background_color'] = $data['background_color']; if ($in['name'] == '' || strlen($in['name']) > 100) { $message .= "
Invalid name"; } if ($in['title'] == '' || strlen($in['title']) > 100) { $message .= "
Invalid title"; } if ($in['short_title'] == '' || strlen($in['short_title']) > 35) { $message .= "
Invalid short title"; } if ($in['description'] == '' || strlen($in['description']) > 250) { $message .= "
Invalid description"; } if ($in['background_picture'] == '' || strlen($in['background_picture']) > 150) { $message .= "
Invalid background picture"; } if ($in['button1'] == '' || strlen($in['button1']) > 35) { $message .= "
Invalid button1"; } if ($in['button1_text'] == '' || strlen($in['button1_text']) > 35) { $message .= "
Invalid button1 text"; } if ($in['button1_action'] == '' || strlen($in['button1_action']) > 15) { $message .= "
Invalid category"; } if ($data['card_canexpire_value'] != '' && $data['card_canexpire_value'] == 1 && ($data['card_expiration'] == '' || strtotime($data['card_expiration']) < time())) { $message .= "
Invalid expiration date"; } // print_r($in); if ($message == '') { $out = array(); $ret = $this->savvy_api($in, $out); if ($ret == PHP_API_OK) { $message = $id > 0 ? 'Updated!' : 'Created!'; } else { $message = 'Failed to ' . ($id > 0 ? 'update' : 'create') . ' card: ' . $out["status"]; } } } else { $in['card_expiration'] = date("Y-m-d", strtotime("+3 months")); } $data['message'] = $message; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $this->load->library('pagination'); $config = array(); $q = "SELECT * FROM main_cards WHERE status=1"; if ($card_category != '' && $card_category != '0') { $q .= " AND button1_action='" . pg_escape_string($card_category) . "'"; } $query = $this->read_replica->query($q); $config["total_rows"] = $query->num_rows(); $config["base_url"] = '/bkoadmin/cards/' . $card_category . '/'; $config["per_page"] = 6; $config["uri_segment"] = 4; $config["num_links"] = 5; $config['full_tag_open'] = ""; $config['num_tag_open'] = '
  • '; $config['num_tag_close'] = '
  • '; $config['cur_tag_open'] = "
  • "; $config['cur_tag_close'] = "
  • "; $config['next_tag_open'] = "
  • "; $config['next_tagl_close'] = "
  • "; $config['prev_tag_open'] = "
  • "; $config['prev_tagl_close'] = "
  • "; $config['first_tag_open'] = "
  • "; $config['first_tagl_close'] = "
  • "; $config['last_tag_open'] = "
  • "; $config['last_tagl_close'] = "
  • "; $this->pagination->initialize($config); $page = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0; $page = is_numeric($page) ? $page : 0; $data["links"] = $this->pagination->create_links(); $mysql = "SELECT '' ||'

    '|| " . "'' AS Edit," . " 'Name:'|| name||'
    Title:'||title||'
    Short Title'||short_title||'
    Desc :'||description ||'
    Button :'||button1||'
    Button Text :' ||button1_text||'
    Action :'||button1_action AS description, '
    archive
    ' As button FROM main_cards WHERE status = 1 "; if ($card_category != '' && $card_category != '0') { $mysql .= " AND button1_action='" . pg_escape_string($card_category) . "'"; } $mysql .= " ORDER BY id DESC LIMIT " . $config["per_page"] . " OFFSET " . $page; $query = $this->read_replica->query($mysql); $this->table->set_heading(array('data' => 'View', 'style' => 'width:50px'), 'Card', array('data' => 'Image', 'style' => 'width:120px')); $data["card_table"] = $this->table->generate($query); $this->renderCardPage('view_cards', $data); } /** * List cards which have expired time * @return mixed */ public function expiredcards() { $data = array(); $data['page_title'] = 'Expired Cards'; $this->load->model( 'combo_model' ); $data['card_category_vaue'] = trim($this->input->post('card_category')); $data['card_can_save_value'] = trim($this->input->post('card_can_save')); $data['card_pictures_value'] = trim($this->input->post('card_pictures')); $data['card_status_value'] = trim($this->input->post('card_status')); $data['card_template_value'] = trim($this->input->post('card_template')); $data['card_canexpire_value'] = trim($this->input->post('card_canexpire')); $data['card_notify_value'] = trim($this->input->post('card_notify')); $data['card_country_value'] = trim($this->input->post('card_country')); $data['card_titleshow_value'] = trim($this->input->post('card_titleshow')); $card_filter_by_field = trim($this->input->get('card_filter_by')); $card_filter_by_value = trim($this->input->get('filter_by_value')); $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if ( !empty($card_category) ) { $data['card_category_vaue'] = trim($card_category); } else { $card_category = $data['card_category_vaue']; } $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $params = $this->input->get(); $params['card_category'] = $card_category; $data['cart_filter_by_selectbox'] = $this->getCardFilterByFields('filter_name', $params['filter_name'] ?? ''); $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_vaue']); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_name'] = trim($this->input->post('card_name')); $data['card_title'] = trim($this->input->post('card_title')); $data['short_title'] = trim($this->input->post('short_title')); $data['description'] = trim($this->input->post('description')); $data['background_picture'] = trim($this->input->post('background_picture')); $data['button1'] = trim($this->input->post('button1')); $data['button1_text'] = trim($this->input->post('button1_text')); $data['button1_action'] = trim($this->input->post('button1_action')); $data['card_expiration'] = trim($this->input->post('card_expiration')); // prepare table $this->load->library('table'); $this->table->set_heading( array( 'data' => 'View', 'style' => 'width:50px' ), 'Card', array( 'data' => 'Image', 'style' => 'width:120px' ), array( 'data' => 'Delete', 'style' => 'width:120px' ) ); $results = $this->main_cards_model->getCardsExpired( $params ); $tableData = $this->returnAdminTable( array( 'count_query' => $results, 'query' => $results ), '/cards/expiredcards/' . $card_category, array( 'per_page' => 6, 'reuse_query_string' => TRUE, 'uri_segment' => 4 ) ); $data['filterData'] = $params; $data['card_table'] = $tableData['output_table']; $data['links'] = $tableData['links']; $this->renderCardPage('view_expirecards', $data); } public function arcvcards() { $data = array(); $data["page_title"] = "Inactive or Archived Cards"; $data["form_button"] = "Add"; $data["images"] = array(); $this->load->model('combo_model'); $data['card_category_vaue'] = trim($this->input->post('card_category')); $data['card_can_save_value'] = trim($this->input->post('card_can_save')); $data['card_pictures_value'] = trim($this->input->post('card_pictures')); $data['card_status_value'] = trim($this->input->post('card_status')); $data['card_template_value'] = trim($this->input->post('card_template')); $data['card_canexpire_value'] = trim($this->input->post('card_canexpire')); $data['card_notify_value'] = trim($this->input->post('card_notify')); $data['card_country_value'] = trim($this->input->post('card_country')); $data['card_titleshow_value'] = trim($this->input->post('card_titleshow')); $card_filter_by_field = trim($this->input->get('card_filter_by')); $card_filter_by_value = trim($this->input->get('filter_by_value')); $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; if (!empty($card_category)) { $data['card_category_vaue'] = trim($card_category); } else { $card_category = $data['card_category_vaue']; } $data['card_category'] = $this->combo_model->getCardCategoryCombo('card_category', $data['card_category_vaue']); $data['card_can_save'] = $this->combo_model->getYesNoCombo('card_can_save', $data['card_can_save_value']); $data['card_pictures'] = $this->combo_model->getCardPicturesCombo('card_pictures', $data['card_pictures_value']); $data['card_status'] = $this->combo_model->getStatusCombo('card_status', $data['card_status_value']); $data['card_template'] = $this->combo_model->getCardTemplateCombo('card_template', $data['card_template_value']); $data['card_canexpire'] = $this->combo_model->getYesNoCombo('card_canexpire', $data['card_canexpire_value']); $data['card_notify'] = $this->combo_model->getYesNoCombo('card_notify', $data['card_notify_value']); $data['card_country'] = $this->combo_model->getCountryCombo('card_country', $data['card_country_value']); $data['card_titleshow'] = $this->combo_model->getTitleShowCombo('card_titleshow', $data['card_titleshow_value']); $data['card_name'] = trim($this->input->post('card_name')); $data['card_title'] = trim($this->input->post('card_title')); $data['short_title'] = trim($this->input->post('short_title')); $data['description'] = trim($this->input->post('description')); $data['background_picture'] = trim($this->input->post('background_picture')); $data['button1'] = trim($this->input->post('button1')); $data['button1_text'] = trim($this->input->post('button1_text')); $data['button1_action'] = trim($this->input->post('button1_action')); $data['card_expiration'] = trim($this->input->post('card_expiration')); // $data['card_template'] = trim($this->input->post('card_template')); $message = ''; $data['message'] = $message; $card_category = ($this->uri->segment(3)) ? $this->uri->segment(3) : '0'; $params = $this->input->get(); $params['card_category'] = $card_category; $data['cart_filter_by_selectbox'] = $this->getCardFilterByFields('filter_name', $params['filter_name'] ?? ''); $this->load->library('table'); $this->table->set_heading( ['data' => 'View', 'style' => 'width:50px'], 'Card', ['data' => 'Image', 'style' => 'width:220px'], ['data' => 'Delete', 'style' => 'width:10px'] ); $query = $this->main_cards_model->getArchivedCardsQuery($params); $tableData = $this->returnAdminTable( [ 'count_query' => $query, 'query' => $query, ], '/cards/arcvcards/' . $card_category . '/', [ 'per_page' => 6, 'reuse_query_string' => TRUE, 'uri_segment' => 4, ] ); $data['filterData'] = $params; $data['card_table'] = $tableData['output_table']; $data['links'] = $tableData['links']; $this->renderCardPage('view_arcvcards', $data); } public function deletecard() { $card_id = (int) $this->input->get('card_id'); if ($card_id > 0) { // $card_id = $this->input->get('card_id'); $mysql = "UPDATE main_cards SET deleted = now(),status=0 WHERE deleted IS NULL AND id = " . $card_id; $this->db->query($mysql); echo "Deleted." . $card_id; } return 0; } public function deletetoinactive() { $card_id = (int) $this->input->get('card_id'); if ($card_id > 0) { // $card_id = $this->input->get('card_id'); $mysql = "UPDATE main_cards SET deleted = NULL,status=0 WHERE deleted IS NOT NULL AND id = " . $card_id; $this->db->query($mysql); echo "Deleted." . $card_id; } return 0; } public function cardsettings() { echo 'ffffffff'; return 0; } //set_form public function updatesettings() { //echo 'uuu'; if ($_GET) { $setting_id = $this->input->get('setting_id'); $setting_key = $this->input->get('setting_key'); $setting_value = $this->input->get("setting_value"); $mysql = "UPDATE app_settings SET value = '" . pg_escape_string($setting_value) . "' WHERE id = " . $setting_id . " AND setting_key = '$setting_key' "; //echo $mysql; $this->db->query($mysql); echo "Updated."; } else { echo "Invalid request."; } return 0; } public function cardarchive() { if ($_GET) { $card_id = $this->input->get('card_id'); $mysql = "UPDATE main_cards SET status = 0 WHERE id = " . $card_id; // echo $sql; $this->db->query($mysql); echo "Archived."; } return 0; } public function cardactivate() { if ($_GET) { $card_id = $this->input->get('card_id'); $mysql = "UPDATE main_cards SET status = 1 WHERE id = " . $card_id; // echo $sql; $this->db->query($mysql); echo "Activated."; } return 0; } public function cardactions() { $data = array(); $data["page_title"] = "Cards"; $data["form_button"] = "Add"; $data["links"] = ""; $data["card_category"] = ""; $this->load->model('combo_model'); $message = ""; $this->load->library('table'); $this->table->set_template($this->template); $data["card_action_id"] = 0; $data["name"] = $this->input->post('name'); $data["type"] = $this->input->post('type'); $data["type_combo"] = $this->combo_model->getCardActionTypeCombo('type', $data['type']); $data["data"] = $this->input->post('data'); if ($_POST) { $message = 'Not implemented!'; $id = $this->input->post('id'); if ($id > 0) { $in['action'] = SAVVY_BKO_MAINCARD_UPDATE; // TODO $in['id'] = $id; $data["form_button"] = "Update"; $data["card_action_id"] = $id; } else { $in['action'] = SAVVY_BKO_MAINCARD_CREATE; // TODO } } // id, name, type, data //echo ""; /* ' ||'

    '|| " . "'' AS Edit," . " */ $mysql = "SELECT id, name, type, data FROM card_actions ORDER BY name"; $query = $this->read_replica->query($mysql); $data["card_action_table"] = $this->table->generate($query); $data["message"] = $message; $this->renderCardPage('view_cardactions', $data); } public function DELtransport() { $data = [ "id" => "0", "message" => "", "name" => "", "client" => "", "token" => "", "code" => "", "access_token" => "", "form_button" => "Create" ]; try { $this->load->model('combo_model'); $data['provider_status_value'] = (int) $this->input->post('card_status'); $data['provider_status'] = $this->combo_model->getStatusCombo('card_status', $data['provider_status_value']); if ($_POST) { $data['name'] = trim($this->input->post('name')); $data['client'] = trim($this->input->post('client')); $data['token'] = trim($this->input->post('token')); $data['code'] = trim($this->input->post('code')); $data['access_token'] = trim($this->input->post('access_token')); $data['active'] = $data['provider_status_value']; /* name | character varying(50) | not null client | character varying(100) | token | character varying(200) | code | character varying(100) | access_token | character varying(200) | active | smallint | default 1 */ if ($data['name'] == '' || strlen($data['name']) > 100) { $data['message'] .= "
    Invalid name"; } if (strlen($data['client']) > 100) { $data['message'] .= "
    Invalid client ID"; } if (strlen($data['token']) > 200) { $data['message'] .= "
    Invalid token"; } if (strlen($data['code']) > 100) { $data['message'] .= "
    Invalid access code"; } if (strlen($data['access_token']) > 200) { $data['message'] .= "
    Invalid access token"; } $id = $this->input->post('id'); if ($id > 0) { // Update $q = "UPDATE transport_providers SET name='" . pg_escape_string($data['name']) . "', client='" . pg_escape_string($data['client']) . "',token='" . pg_escape_string($data['token']) . "', code='" . pg_escape_string($data['code']) . "',access_token='" . pg_escape_string($data['access_token']) . "', active=" . $data["active"] . " WHERE id=${id} RETURNING id"; } else { // Insert $q = "INSERT INTO transport_providers (name,client,token,code,access_token,active) VALUES( '" . pg_escape_string($data['name']) . "', '" . pg_escape_string($data['client']) . "', '" . pg_escape_string($data['token']) . "', '" . pg_escape_string($data['code']) . "', '" . pg_escape_string($data['access_token']) . "', " . $data["active"] . " ) RETURNING id"; } if ($data['message'] == "") { $r = $this->db->query($q); $f = $r->row_array(); if ($f != NULL && isset($f["id"]) && $f["id"] > 0) { $data["id"] = $f["id"]; $data['message'] = 'Provider ' . ($id > 0 ? 'updated' : 'created') . '!'; $data["form_button"] = 'Update'; } else { $data['message'] = 'Failed to ' . ($id > 0 ? 'update' : 'create') . ' provider!'; } } } else { $data['provider_status'] = $this->combo_model->getStatusCombo('card_status', 1); } $mysql = "SELECT id,concat('',name,'') as Name,concat('Client: ',client,'
    Token: ',token,'
    Code: ',code,'
    Access Token: ',access_token) as Credentials,(CASE active WHEN 1 THEN 'Yes' ELSE 'No' END) as Active,'' as action FROM transport_providers ORDER BY name"; $query = $this->read_replica->query($mysql); $this->load->library('table'); $this->table->set_template($this->template); $this->table->set_heading( array('data' => 'ID', 'style' => 'width:50px'), array('data' => 'Name', 'style' => 'width:190px'), 'Credentials', array('data' => 'Active?', 'style' => 'width:50px'), array('data' => 'Action', 'style' => 'width:90px')); $data["transporter_table"] = $this->table->generate($query); $data["transport_providers"] = []; $q = "SELECT * FROM transport_providers"; $r = $this->read_replica->query($q); foreach ($r->result() as $row) { $data["transport_providers"][$row->{'id'}] = (array) $row; } $q = "select b.name,a.country,a.ios_app_id,a.android_app_id,concat('') as Action from transport_provider_apps a, transport_providers b where b.id=a.transport_provider_id order by b.name,a.country"; $r = $this->read_replica->query($q); $data["transporter_apps"] = $this->table->generate($r); } catch (Exception $e) { $data["transporter_table"] = ""; $data["transporter_apps"] = ""; $data["message"] = $e->getMessage(); } $this->renderCardPage('view_transporter', $data); return 0; } public function DELmytransport() { $data = array(); $data["images"] = array(); $this->renderCardPage('view_mytransport', $data); } public function transportApps() { $data = []; $id = (int) $this->input->get('id'); $app_id = (int) $this->input->get('app_id'); if ($id > 0) { $q = "SELECT * FROM transport_providers WHERE id=${id}"; $r = $this->read_replica->query($q); $f = $r->row_array(); if ($f != NULL && isset($f["id"]) && $f["id"] > 0) { $data = $f; } } if (count($data) < 1) { $this->load->helper('url'); redirect('/bkoadmin/transport', 'refresh'); return 0; } $data["message"] = ""; $data["form_button"] = "Add"; $data["app_id"] = $app_id; $data["country"] = "SG"; $data["ios_app_id"] = ""; $data["android_app_id"] = ""; if ($_POST) { $data['country_value'] = trim($this->input->post('country')); $data['ios_app_id'] = trim($this->input->post('ios_app_id')); $data['android_app_id'] = trim($this->input->post('android_app_id')); if (strlen($data['country_value']) != 2) { $data['message'] .= "
    Invalid country"; } if (strlen($data['ios_app_id']) > 100) { $data['message'] .= "
    Invalid iOS app ID"; } if (strlen($data['android_app_id']) > 100) { $data['message'] .= "
    Invalid Android app ID"; } $id = (int) $this->input->post('id'); $app_id = (int) $this->input->post('app_id'); if ($app_id > 0) { // Update $q = "UPDATE transport_provider_apps SET country='" . pg_escape_string($data["country_value"]) . "', ios_app_id='" . pg_escape_string($data["ios_app_id"]) . "',android_app_id='" . pg_escape_string($data["android_app_id"]) . "' WHERE id=${app_id} AND transport_provider_id=${id} RETURNING id"; } else { // Insert $q = "INSERT INTO transport_provider_apps (transport_provider_id,country,ios_app_id,android_app_id) VALUES( ${id}, '" . pg_escape_string($data["country_value"]) . "', '" . pg_escape_string($data["ios_app_id"]) . "', '" . pg_escape_string($data["android_app_id"]) . "' ) RETURNING id"; } if ($data['message'] == "") { $r = $this->db->query($q); $f = $r->row_array(); if ($f != NULL && isset($f["id"]) && $f["id"] > 0) { $data["app_id"] = $f["id"]; $data['message'] = 'Provider app ' . ($id > 0 ? 'updated' : 'created') . '!'; $data["form_button"] = 'Update'; } else { $data['message'] = 'Failed to ' . ($id > 0 ? 'update' : 'create') . ' provider app!'; } } } else { $data['country_value'] = 'SG'; } $this->load->model('combo_model'); $this->load->library('table'); $this->table->set_template($this->template); $data["country_select"] = $this->combo_model->getCountryCombo('country', $data['country_value']); $q = "SELECT country,ios_app_id AS \"iOS App ID\",android_app_id AS \"Android App ID\",'' as action FROM transport_provider_apps WHERE transport_provider_id=${id}"; $r = $this->read_replica->query($q); $data["transporter_apps"] = $this->table->generate($r); $data["transport_apps"] = []; $q = "SELECT * FROM transport_provider_apps WHERE transport_provider_id=${id}"; $r = $this->read_replica->query($q); foreach ($r->result() as $row) { $data["transport_apps"][$row->{'id'}] = (array) $row; } $this->renderCardPage('view_transporter_apps', $data); return 0; } public function viewcard() { $card_id = $this->input->get('card_id'); if ($card_id != '' && $card_id > 0) { $mysql = "SELECT * FROM main_cards WHERE id = $card_id"; $query = $this->read_replica->query($mysql); $selected_card = $query->row_array(); $slogan_style = ($selected_card['titleshow'] == 0 || empty($selected_card["title"]) || strtolower(trim($selected_card["title"])) == 'n/a') ? 'style="display:none;"' : ''; // 7: Active tip => show background only $background_color = !empty($selected_card['background_color']) ? $selected_card['background_color'] : 'fff'; $card_bg = $selected_card['template']==self::TEMPLATE_ACTIVE_TIP?"background-color: #{$background_color};" :"background-image: url('{$selected_card["background_picture"]}')"; echo "
    \"\"

    {$selected_card["title"]}

    {$selected_card["description"]}

    \"\" \"\"

    {$selected_card["title"]}

    {$selected_card["description"]}

    \"\"
    "; } } public function compare() { $this->load->library('table'); $this->table->set_template($this->template); $data = array(); $data["from"] = 2; //"Marina Bay Sands, 10 Bayfront Ave, Singapore 018956"; $data["to"] = 3; //"97 Meyer Road, Singapore"; $data["all"] = 1; $data["date_from"] = date("Y-m-1", strtotime("-2 months")); $data["date_to"] = date("Y-m-d"); if ($this->input->post()) { $data["from"] = $this->input->post('from'); $data["to"] = $this->input->post('to'); $data["all"] = (int) $this->input->post('all'); $dates = explode(' - ', $this->input->post('daterange')); $data["date_from"] = date("Y-m-d", strtotime($dates[0])); $data["date_to"] = date("Y-m-d", strtotime($dates[1])); $db_from = (int) ($data["from"]); $db_to = (int) ($data["to"]); $q = "select distinct travel_date AS \"Travel Date\", travel_date_end \"Travel Date End\", cost AS \"Cost\", duration AS \"Duration\", distance AS \"Distance\", transport_provider_id as \"Transport\" from parsedemail_item where dup_id is null and location_start_id='${db_from}' and location_end_id='${db_to}'"; if ($data["all"] != 1) { $q .= " and travel_date between '" . $data["date_from"] . "' and '" . $data["date_to"] . "'"; } $q .= " order by travel_date"; $query = $this->read_replica->query($q); //$this->table->set_heading(array('data' => 'Count', 'style' => 'width:10px'), 'Start Location', 'End Location'); $data['past_trips'] = $this->table->generate($query); $bulk_data = []; $by_vendor = []; $day_hour = []; foreach ($query->result() as $row) { $bulk_data[$row->{'Travel Date'}] = $row->{'Cost'}; $by_vendor[$row->{'Travel Date'}][$row->{'Transport'}] = $row->{'Cost'}; $hr = date("H", strtotime($row->{'Travel Date'})); if (!isset($day_hour[$hr])) $day_hour[$hr] = []; $day_hour[$hr][] = $row->{'Cost'}; } $q = "select distinct to_char(a.completed, 'yyyy-mm-dd HH24:MI:SS') AS \"Quote Date\", to_char(a.created, 'yyyy-mm-dd HH24:MI:SS') \"Request Date\", a.cost AS \"Cost\", 'N/A' AS \"Duration\", 'N/A' AS \"Distance\", a.transport_provider_id as \"Transport\" from quotes a, address b, address c where a.cost>0 and a.completed is not null and b.id=a.location_start_id and c.id=a.location_end_id and b.id='${db_from}' and c.id='${db_to}'"; if ($data["all"] != 1) { $q .= " and a.completed::date between '" . $data["date_from"] . "' and '" . $data["date_to"] . "'"; } $q .= " order by \"Quote Date\""; $query = $this->read_replica->query($q); $data['quotes'] = $this->table->generate($query); foreach ($query->result() as $row) { $bulk_data[$row->{'Quote Date'}] = $row->{'Cost'}; $by_vendor[$row->{'Quote Date'}][$row->{'Transport'}] = $row->{'Cost'}; $hr = date("H", strtotime($row->{'Quote Date'})); if (!isset($day_hour[$hr])) $day_hour[$hr] = []; $day_hour[$hr][] = $row->{'Cost'}; } foreach ($day_hour as $hr => $val) { asort($val); $pk = NULL; $pv = NULL; foreach ($val as $k => $v) { if ($v == $pv) { unset($day_hour[$hr][$k]); } else { $pk = $k; $pv = $v; } } } asort($day_hour); $data["bulk_data"] = $bulk_data; $data["by_vendor"] = $by_vendor; $data["day_hour"] = $day_hour; } else { $data['past_trips'] = ""; $data['quotes'] = ""; $data["bulk_data"] = array(); $data["by_vendor"] = array(); $data["day_hour"] = array(); } $q = "SELECT id,address FROM address ORDER BY address"; $query = $this->read_replica->query($q); $address = []; foreach ($query->result() as $row) { $address[$row->{"id"}] = $row->{"address"}; } $data["address"] = $address; $this->renderCardPage('view_compare', $data); } public function country() { global $savvyext; $data['storage'] = $savvyext->cfgReadChar('system.storage_url'); $data["message"] = ""; if ($this->input->post()) { $data = $this->countryImageUpload($data); } $data["images"] = array(); $data["page_title"] = "Country"; $this->load->library('pagination'); $config = array(); $q = "SELECT * FROM country a LEFT JOIN card_images b ON (b.id=a.top_image) ORDER BY a.country"; $query = $this->read_replica->query($q); $config["total_rows"] = $query->num_rows(); $config["base_url"] = '/bkoadmin/country'; $config["per_page"] = 10; $config["uri_segment"] = 3; $config["num_links"] = 5; $config['full_tag_open'] = ""; $config['num_tag_open'] = '
  • '; $config['num_tag_close'] = '
  • '; $config['cur_tag_open'] = "
  • "; $config['cur_tag_close'] = "
  • "; $config['next_tag_open'] = "
  • "; $config['next_tagl_close'] = "
  • "; $config['prev_tag_open'] = "
  • "; $config['prev_tagl_close'] = "
  • "; $config['first_tag_open'] = "
  • "; $config['first_tagl_close'] = "
  • "; $config['last_tag_open'] = "
  • "; $config['last_tagl_close'] = "
  • "; $this->pagination->initialize($config); $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0; $page = is_numeric($page) ? $page : 0; $data["links"] = $this->pagination->create_links(); $q = "SELECT a.*,b.uniqueid,b.name,b.format FROM country a LEFT JOIN card_images b ON (b.id=a.top_image) ORDER BY a.country"; $q .= " LIMIT " . $config["per_page"] . " OFFSET " . $page; $r = $this->read_replica->query($q); $countries = []; foreach ($r->result() as $row) { $countries[] = (array) $row; } $data["countries"] = $countries; $this->renderCardPage('view_country', $data); } private function countryImageUpload($data) { $id = (int) $this->input->post('id'); $catid = (int) $this->input->post('catid'); // 4 - adminsavvy_card_image_category_country if ($id > 0 && $catid > 0) { $this->load->library('uploadhelper'); $q = "SELECT code FROM country WHERE id=" . $id; $r = $this->read_replica->query($q); $f = $r->result_array()[0]; ob_start(); $data = $this->uploadhelper->cardimagesPost($data, $this, $f["code"]); $str = ob_get_clean(); if (substr($str, 0, 8) == 'Uploaded' && (!isset($data["card_image_id"]) || $data["card_image_id"] < 1)) { if (preg_match('/^Uploaded ([a-zA-Z0-9]+) to gs:\/\/(.*)\/(.*)\.(.*)$/', $str, $arr) == 1 && count($arr) > 4 && $arr[2] == 'adminsavvy_card_image_category_country') { $uniqueId = pg_escape_string($arr[3]); $fmt = $arr[4]; $q = "SELECT id FROM card_images WHERE uniqueid='${uniqueId}'"; $r = $this->read_replica->query($q); $f = $r->row_array(); if ($f != NULL && is_array($f) && $f["id"] > 0) { $data["card_image_id"] = $f["id"]; } } } // Uploaded phpGUIDjh to gs://adminsavvy_card_image_category_country/RATEMKrK9B.jpg if (isset($data["card_image_id"]) && $data["card_image_id"] > 0) { $q = "UPDATE country SET top_image='" . $data["card_image_id"] . "' WHERE id=${id}"; $this->db->query($q); } else if (!isset($data["message"]) || $data["message"] == "") { $data["message"] = "Failed to save image"; } } else { $data["message"] = "Invalid ID"; } return $data; } public function countryStatus() { $id = (int) $this->input->get('id'); $status = (int) $this->input->get('status'); if ($id > 0) { $q = "UPDATE country SET status=${status} WHERE id=${id}"; $r = $this->db->query($q); echo "Status updated"; } else { echo "Invalid ID!"; } } public function countryImageDelete() { $data = []; $id = (int) $this->input->get('id'); if ($id > 0) { $q = "SELECT top_image FROM country WHERE id='${id}'"; $r = $this->read_replica->query($q); $f = $r->row_array(); if ($f != NULL && is_array($f) && $f["top_image"] > 0) { $data["id"] = $f["top_image"]; $this->load->library('uploadhelper'); $data = $this->uploadhelper->deleteCardimageFile($data, $this, 'country', 'top_image'); if (isset($data["deleted"]) && $data["deleted"] > 0) { $q = "UPDATE country SET top_image=NULL WHERE top_image='" . $data["deleted"] . "'"; $this->db->query($q); echo "Image deleted"; } else if (!isset($data["message"]) || $data["message"] == "") { echo "Delete failed!"; } else { echo $data["message"]; } } else { echo "Not top image found"; } } else { echo "Invalid ID!"; } } private function getAddressByAddress($addr) { $db_addr = pg_escape_string($addr); $q = "SELECT * FROM address WHERE lower(address)=lower('${db_addr}')"; $r = $this->read_replica->query($q); if ($row = $r->result()) { //var_dump($row[0]); return $row[0]; } // TODO: Geocoding return NULL; } private function getAddress($id) { $db_id = (int) $id; $q = "SELECT * FROM address WHERE id=${id}"; $r = $this->read_replica->query($q); if ($row = $r->result()) { //var_dump($row[0]); return $row[0]; } // TODO: Geocoding return NULL; } private function geofenceTrip($areas, $data_from, $data_to, $data) { $str = "Geofencing failed!"; $travel_time = 0; $distance = 0; $min_cost = PHP_INT_MAX; $max_cost = 0; $avg_cost = 0; $avg_cnt = 0; $route_overlay = []; // Get Area $postal_from = substr($data_from->{"postal"}, 0, 2); $postal_to = substr($data_to->{"postal"}, 0, 2); $area_from = array(); $area_to = array(); foreach ($areas as $f) { $codes = json_decode($f->{"postal_code"}, true); foreach ($codes["postal_code"] as $code) { if ($postal_from == $code) { $area_from = $f; $str_from = "Travelling from '" . $f->{"name"} . "' (" . $f->{"id"} . ") "; } if ($postal_to == $code) { $area_to = $f; $str_to = " to '" . $f->{"name"} . "' (" . $f->{"id"} . ") "; } } } $history = []; if (isset($area_from->{"postal_code"}) && isset($area_to->{"postal_code"})) { try { // Get distance $distance = $this->distance_between_two_gps_coordinates( $data_from->{"latitude"}, $data_from->{"longitude"}, $data_to->{"latitude"}, $data_to->{"longitude"}, 'K'); $resp = $this->geocode($data_from->{"address"}, $data_to->{"address"}); $route_overlay = $resp["options"]["route_overlay"]; $travel_time = $resp["options"]["travel_time"] / 60; //840; $distance = $resp["options"]["travel_distance"] / 1000.0; //7043 $str = $str_from . $str_to . ' for ' . sprintf("%0.02f", $distance) . ' km'; $str .= ' and ' . ((int) $travel_time) . 'minutes'; // Get history $postals_from = json_decode($area_from->{"postal_code"}, true)["postal_code"]; $postals_to = json_decode($area_to->{"postal_code"}, true)["postal_code"]; $postals_from_str = implode("','", $postals_from); $postals_to_str = implode("','", $postals_to); $q = "SELECT a.*, b.postal AS spostal, b.address AS saddress, c.postal AS epostal, c.address AS eaddress FROM parsedemail_item a LEFT JOIN address b ON (b.id=a.location_start_id) LEFT JOIN address c ON (c.id=a.location_end_id) WHERE substring(b.postal from 1 for 2) IN ('${postals_from_str}') AND substring(c.postal from 1 for 2) IN ('${postals_to_str}') AND a.dup_id IS NULL ORDER BY a.distance"; $r = $this->read_replica->query($q); $k1 = $distance - $data["threshold"]; $k2 = $distance + $data["threshold"]; foreach ($r->result() as $row) { $history[] = (array) $row; $c = $row->{"cost"}; $d = $row->{"distance"}; if (is_numeric($d) && is_numeric($c) && $c > 0 && $k1 <= $d && $d <= $k2) { $avg_cnt++; $avg_cost += $c; if ($max_cost < $c) $max_cost = $c; if ($min_cost > $c) $min_cost = $c; } } $avg_cost = $avg_cost / $avg_cnt; $str .= '
    '; $str .= 'Average trip cost is SGD$' . sprintf("%0.02f", $avg_cost) . ' based of ' . $avg_cnt . ' trips matching +/- ' . $data["threshold"] . 'km'; $str .= '
    '; $str .= 'Minimal trip cost is SDG$' . sprintf("%0.02f", $min_cost) . ', maximal trip cost is SDG$' . sprintf("%0.02f", $max_cost); } catch (Exception $e) { error_log($e->getMessage()); } } $data["geofence"] = $str; $data["area_from"] = $area_from; $data["area_to"] = $area_to; $data["history"] = $history; $data["distance"] = $distance; $data["travel_time"] = $travel_time; $data["route_overlay"] = $route_overlay; $data["min_cost"] = $min_cost; $data["max_cost"] = $max_cost; $data["avg_cost"] = $avg_cost; $data["avg_cnt"] = $avg_cnt; return $data; } public function geofencing() { $this->load->library('table'); $this->table->set_template($this->template); $data = array("geofence" => ""); $data["from"] = 2; //"Marina Bay Sands, 10 Bayfront Ave, Singapore 018956"; $data["to"] = 3; //"97 Meyer Road, Singapore"; $data["threshold"] = 1.1; // +/- km $areas = array(); $q = 'SELECT a.*,b.name AS sector,c.name AS region FROM singapore_districts a, singapore_sectors b, singapore_regions c WHERE b.id=a.sector_id AND c.id=a.region_id'; $query = $this->read_replica->query($q); foreach ($query->result() as $row) { $areas[] = $row; } $data['areas'] = $areas; if ($this->input->post()) { $data["from"] = $this->input->post('from'); $data["to"] = $this->input->post('to'); $data["threshold"] = $this->input->post('threshold'); $data["data_from"] = $this->getAddress($data["from"]); $data["data_to"] = $this->getAddress($data["to"]); $data = $this->geofenceTrip($areas, $data["data_from"], $data["data_to"], $data); } $q = "SELECT id, address FROM address ORDER BY address"; $query = $this->read_replica->query($q); $address = []; foreach ($query->result() as $row) { $address[$row->{"id"}] = $row->{"address"}; } $data["address"] = $address; $this->renderCardPage('view_geofencing', $data); } private function getCardFilterByFields($name, $curVal = '', $custom_options = []) { /** * Prepare filter options for cards fields */ $options = []; $options[] = [ "id" => '', "name" => 'All' ]; $options[] = [ "id" => 'name', "name" => 'Name', ]; $options[] = [ "id" => 'title', "name" => 'Title', ]; $options[] = [ "id" => 'short_title', "name" => 'Short Title', ]; $options[] = [ "id" => 'description', "name" => 'Desc', ]; $options[] = [ "id" => 'button1_action', "name" => 'Action', ]; $elem = '"; return $elem; } private function distance_between_two_gps_coordinates($lat1, $lon1, $lat2, $lon2, $unit) { if (($lat1 == $lat2) && ($lon1 == $lon2)) { return 0; } else { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } } private function geocode($addrFrom, $addrTo) { global $savvyext; $httpAuthToken = $savvyext->cfgReadChar('system.oauth2_token'); $encryptionAlg = $savvyext->cfgReadChar('encryption.algorithm'); $encryptionKey = $savvyext->cfgReadChar('encryption.key'); $encryptionIV = $savvyext->cfgReadChar('encryption.iv'); $api_url = $savvyext->cfgReadChar('system.api_url'); $payload = "{ \"addresses\":[ {\"address\":\"${addrFrom}\",\"type\":1}, {\"address\":\"${addrTo}\",\"type\":2} ], \"options\":{ \"travel_time\": true, \"route_overlay\": true } }"; $encrypted_payload = bin2hex( openssl_encrypt( $payload, $encryptionAlg, $encryptionKey, OPENSSL_RAW_DATA, $encryptionIV )); $postdata = "{\"encrypted_payload\": \"${encrypted_payload}\"}"; $url = $api_url . "/trips/api/geocode"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_VERBOSE, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($postdata), 'Authorization: Server-Token ' . $httpAuthToken, "client_id: BackOffice" ) ); $body = curl_exec($ch); $result = json_decode($body, true); $payload = openssl_decrypt( hex2bin( $result['payload'] ), $encryptionAlg, $encryptionKey, OPENSSL_RAW_DATA, $encryptionIV ); return json_decode($payload, true); } var $template2 = array( 'table_open' => "", 'thead_open' => '', 'thead_close' => '', 'heading_row_start' => '', 'heading_row_end' => '', 'heading_cell_start' => '', 'tbody_open' => '', 'tbody_close' => '', 'row_start' => '', 'row_end' => '', 'cell_start' => '', 'row_alt_start' => '', 'row_alt_end' => '', 'cell_alt_start' => '', 'table_close' => '
    ', 'heading_cell_end' => '
    ', 'cell_end' => '
    ', 'cell_alt_end' => '
    ' ); // card update refresh fragments private function refresh_card_items( $newData ) { ob_start(); printf(' Name: %s
    Title: %s
    Short Title: %s
    Desc: %s
    Button: %s
    Button Text: %s
    Action: %s ', $newData['name'], $newData['title'], $newData['short_title'], $newData['description'], $newData['button1'], $newData['button1_text'], $newData['button1_action'] ); $card_section = ob_get_clean(); return $card_section; } }