/**
  * Connects to DB and inserts the user response.
  * @param $response (array) data we'll be saving to the response table
  * @return builds and returns a response message
  */
 public function insert_response_quiz($response)
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':quiz_id' => $response['quiz_id'], ':user_id' => $response['user_id'], ':quiz_viewed' => 1, ':response_quiz_created_at' => $response['response_quiz_updated_at'], ':response_quiz_updated_at' => $response['response_quiz_updated_at']);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->response_quiz_table . " (\n                                            quiz_id,\n                                            user_id,\n                                            quiz_viewed,\n                                            response_quiz_created_at,\n                                            response_quiz_updated_at\n                                        )\n                                        VALUES(\n                                            :quiz_id,\n                                            :user_id,\n                                            :quiz_viewed,\n                                            :response_quiz_created_at,\n                                            :response_quiz_updated_at\n                                        )";
     // insert the mc_option into the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         // add our response ID to the array we're working with
         $response['response_quiz_id'] = $pdo->lastInsertId();
         // set-up our response array
         $return = array('response_quiz_id' => $response['response_quiz_id'], 'status' => 'success', 'action' => 'insert');
         // merge the response arrays
         $return = array_merge($response, $return);
     } else {
         // handle errors
         $return['error'] = 'Save response failed.';
     }
     // return response
     return $return;
 }
 /**
  * Connects to DB and inserts the user response.
  * @param $response (array) data we'll be saving to the response table
  * @return builds and returns a response message
  */
 protected function insert_response_mc($response)
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':response_quiz_id' => $response['response_quiz_id'], ':response_question_id' => $response['response_question_id'], ':mc_option_id' => $response['question_response']);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->response_mc_table . " (\n                                            response_quiz_id,\n                                            response_question_id,\n                                            mc_option_id\n                                        )\n                                        VALUES(\n                                            :response_quiz_id,\n                                            :response_question_id,\n                                            :mc_option_id\n                                        )";
     // insert the mc_option into the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         // add our response ID to the array we're working with
         $response['response_mc_id'] = $pdo->lastInsertId();
         // set-up our response array
         $response_response = array('response_mc_id' => $response['response_mc_id'], 'status' => 'success', 'action' => 'insert');
         // see what type of question we're working on and save that response
         if ($response['question_type'] === 'mc') {
             // we added a mc_option successfully, let them know!
             return $response;
         }
     } else {
         // handle errors
         return false;
     }
 }
 protected function insert_quiz_option($quiz_option)
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':quiz_id' => parent::$quiz['quiz_id'], ':quiz_option_name' => $quiz_option, ':quiz_option_value' => parent::$quiz[$quiz_option]);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->quiz_option_table . " (\n                                            quiz_id,\n                                            quiz_option_name,\n                                            quiz_option_value\n                                        )\n                                        VALUES(\n                                            :quiz_id,\n                                            :quiz_option_name,\n                                            :quiz_option_value\n                                        )";
     // insert the quiz into the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         $quiz_option_id = $pdo->lastInsertId();
         // set-up our response array
         $quiz_option_response = array('quiz_option_id' => $quiz_option_id, 'status' => 'success', 'action' => 'insert');
         // pass the response array to our response object
         parent::$response_obj->set_quiz_option_response($quiz_option_response, $quiz_option);
     } else {
         self::$response_obj->add_error('Quiz option ' . $quiz_option . ' not be added to the database. Try again and if it continues to not work, send us an email with details of how you got to this error.');
     }
 }
 /**
  * Connects to DB and inserts the user response.
  * @param $response (array) data we'll be saving to the response table
  * @return builds and returns a response message
  */
 private function insert_response_ab_test($ab_test_id, $response_quiz_id)
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':ab_test_id' => $ab_test_id, ':response_quiz_id' => $response_quiz_id);
     $sql = "INSERT INTO " . $pdo->response_ab_test_table . " (\n                    response_quiz_id,\n                    ab_test_id\n                )\n                VALUES(\n                    :response_quiz_id,\n                    :ab_test_id\n                )";
     // update the question view the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         // set-up our response array
         $return = array('result_ab_test_id' => $pdo->lastInsertId(), 'status' => 'success', 'action' => 'insert_ab_test_result');
         // merge the response arrays
         self::$return = array_merge($return, self::$return);
         // see what type of question we're working on and save that response
     } else {
         // handle errors
         self::$return['error'][] = 'Insert ab_test_result_id failed.';
     }
     // return response
     return self::$return;
 }
 /**
  * Connects to DB and inserts the question.
  * @param $question = formatted question array
  * @param $quiz_id = which quiz this question goes with
  * @return builds and returns a response message
  */
 protected function insert_question()
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':quiz_id' => parent::$quiz['quiz_id'], ':question_title' => self::$question['question_title'], ':question_image' => self::$question['question_image'], ':question_image_alt' => self::$question['question_image_alt'], ':question_type' => self::$question['question_type'], ':question_explanation' => self::$question['question_explanation'], ':question_order' => self::$question['question_order']);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->question_table . " (\n                                            quiz_id,\n                                            question_title,\n                                            question_image,\n                                            question_image_alt,\n                                            question_type,\n                                            question_explanation,\n                                            question_order\n                                        )\n                                        VALUES(\n                                            :quiz_id,\n                                            :question_title,\n                                            :question_image,\n                                            :question_image_alt,\n                                            :question_type,\n                                            :question_explanation,\n                                            :question_order\n                                        )";
     // insert the question into the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         self::$question['question_id'] = $pdo->lastInsertId();
         // set-up our response array
         $question_response = array('status' => 'success', 'action' => 'insert');
         $question_response = array_merge($this->build_question_response(), $question_response);
         // pass the response array to our response object
         parent::$response_obj->set_question_response($question_response, self::$question);
         // SUCCESS MESSAGES
         // see if we we're adding a mc_option in here...
         if (self::$user_action_action === 'add' && self::$user_action_element === 'question') {
             // we added a mc_option successfully, let them know!
             parent::$response_obj->add_success('Question added.');
         }
         // pass the question on to save_mc_option or save_slider
         // add the question_id to the questions array
         $this->save_question_type_options();
     } else {
         parent::$response_obj->add_error('Question number ' . $question['question_order'] . ' could not be added to the database. Try again and if it continues to not work, send us an email with details of how you got to this error.');
     }
 }
 /**
  * Connects to DB and inserts the mc_option.
  * @param $mc_option = formatted mc_option array
  * @param $question_id = which quiz this mc_option goes with
  * @return builds and returns a response message
  */
 protected function insert_mc_option()
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':question_id' => parent::$question['question_id'], ':mc_option_content' => self::$mc_option['mc_option_content'], ':mc_option_correct' => self::$mc_option['mc_option_correct'], ':mc_option_order' => self::$mc_option['mc_option_order']);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->question_mc_option_table . " (\n                                            question_id,\n                                            mc_option_content,\n                                            mc_option_correct,\n                                            mc_option_order\n                                        )\n                                        VALUES(\n                                            :question_id,\n                                            :mc_option_content,\n                                            :mc_option_correct,\n                                            :mc_option_order\n                                        )";
     // insert the mc_option into the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         // set-up our response array
         $mc_option_response = array('mc_option_id' => $pdo->lastInsertId(), 'status' => 'success', 'action' => 'insert');
         // pass the response array to our response object
         parent::$response_obj->set_mc_option_response($mc_option_response, parent::$question, self::$mc_option);
         // see if we we're adding a mc_option in here...
         if (self::$user_action_action === 'add' && self::$user_action_element === 'mc_option') {
             // we added a mc_option successfully, let them know!
             parent::$response_obj->add_success('Multiple Choice option added to Question #' . (parent::$question['question_order'] + 1) . '.');
         }
     } else {
         parent::$response_obj->add_error('Question #' . (parent::$question['question_order'] + 1) . ' could not add a Multiple Choice Option.');
     }
 }
 /**
  * Insert a new AB Test into the database
  * @param $ab_test (array) full info on data to insert a new AB Test
  * @return response (array)
  */
 private function insert_ab_test($ab_test)
 {
     $valid = $this->validate_submitted_ab_test_quizzes($ab_test);
     if ($valid !== true) {
         return false;
     }
     // try saving
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':ab_test_title' => $ab_test['ab_test_title'], ':quiz_id_a' => $ab_test['quiz_id_a'], ':quiz_id_b' => $ab_test['quiz_id_b'], ':ab_test_owner' => $ab_test['ab_test_owner'], ':ab_test_created_by' => $ab_test['ab_test_created_by'], ':ab_test_created_at' => $ab_test['ab_test_created_at'], ':ab_test_updated_by' => $ab_test['ab_test_updated_by'], ':ab_test_updated_at' => $ab_test['ab_test_updated_at']);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->ab_test_table . " (\n                                            ab_test_title,\n                                            quiz_id_a,\n                                            quiz_id_b,\n                                            ab_test_owner,\n                                            ab_test_created_by,\n                                            ab_test_created_at,\n                                            ab_test_updated_by,\n                                            ab_test_updated_at\n                                        )\n                                        VALUES(\n                                            :ab_test_title,\n                                            :quiz_id_a,\n                                            :quiz_id_b,\n                                            :ab_test_owner,\n                                            :ab_test_created_by,\n                                            :ab_test_created_at,\n                                            :ab_test_updated_by,\n                                            :ab_test_updated_at\n                                        )";
     // insert the quiz into the database
     $stmt = $pdo->query($sql, $params);
     $this->response['action'] = 'insert';
     // success!
     if ($stmt !== false) {
         // set the ab test id
         $this->ab_test['ab_test_id'] = $pdo->lastInsertId();
         // build our response stuff
         $this->response['ab_test_id'] = $this->ab_test['ab_test_id'];
         $this->response['status'] = 'success';
         $this->add_success('AB Test created.');
     } else {
         $this->response['status'] = 'error';
         $this->response['ab_test_id'] = 0;
         $this->add_error('Quiz could not be added to the database. Try again and if it continues to not work, send us an email with details of how you got to this error.');
     }
     return $this->response;
 }
 /**
  * Connects to DB and inserts the quiz.
  * @return builds and returns a response message
  */
 protected function insert_quiz()
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':quiz_title' => self::$quiz['quiz_title'], ':quiz_status' => self::$quiz['quiz_status'], ':quiz_finish_message' => self::$quiz['quiz_finish_message'], ':quiz_owner' => self::$quiz['quiz_owner'], ':quiz_created_by' => self::$quiz['quiz_created_by'], ':quiz_created_at' => self::$quiz['quiz_created_at'], ':quiz_updated_by' => self::$quiz['quiz_updated_by'], ':quiz_updated_at' => self::$quiz['quiz_updated_at'], ':quiz_is_deleted' => self::$quiz['quiz_is_deleted']);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->quiz_table . " (\n                                            quiz_title,\n                                            quiz_status,\n                                            quiz_finish_message,\n                                            quiz_owner,\n                                            quiz_created_by,\n                                            quiz_created_at,\n                                            quiz_updated_by,\n                                            quiz_updated_at,\n                                            quiz_is_deleted\n                                        )\n                                        VALUES(\n                                            :quiz_title,\n                                            :quiz_status,\n                                            :quiz_finish_message,\n                                            :quiz_owner,\n                                            :quiz_created_by,\n                                            :quiz_created_at,\n                                            :quiz_updated_by,\n                                            :quiz_updated_at,\n                                            :quiz_is_deleted\n                                        )";
     // insert the quiz into the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         self::$quiz['quiz_id'] = $pdo->lastInsertId();
         self::$response_obj->set_status('success');
         self::$response_obj->set_action('insert');
         self::$response_obj->add_success('Quiz created.');
         // build a full response object
         self::$response_obj->set_quiz_response(self::$quiz);
     } else {
         self::$response_obj->add_error('Quiz could not be added to the database. Try again and if it continues to not work, send us an email with details of how you got to this error.');
     }
 }
 /**
  * Connects to DB and inserts the slider.
  * @param $slider = formatted slider array
  * @param $question_id = which quiz this slider goes with
  * @return builds and returns a response message
  */
 protected function insert_slider()
 {
     // connect to PDO
     $pdo = new enp_quiz_Db();
     // Get our Parameters ready
     $params = array(':question_id' => parent::$question['question_id'], ':slider_range_high' => self::$slider['slider_range_high'], ':slider_range_low' => self::$slider['slider_range_low'], ':slider_correct_high' => self::$slider['slider_correct_high'], ':slider_correct_low' => self::$slider['slider_correct_low'], ':slider_increment' => self::$slider['slider_increment'], ':slider_prefix' => self::$slider['slider_prefix'], ':slider_suffix' => self::$slider['slider_suffix']);
     // write our SQL statement
     $sql = "INSERT INTO " . $pdo->question_slider_table . " (\n                                            question_id,\n                                            slider_range_low,\n                                            slider_range_high,\n                                            slider_correct_low,\n                                            slider_correct_high,\n                                            slider_increment,\n                                            slider_prefix,\n                                            slider_suffix\n                                        )\n                                        VALUES(\n                                            :question_id,\n                                            :slider_range_low,\n                                            :slider_range_high,\n                                            :slider_correct_low,\n                                            :slider_correct_high,\n                                            :slider_increment,\n                                            :slider_prefix,\n                                            :slider_suffix\n                                        )";
     // insert the slider into the database
     $stmt = $pdo->query($sql, $params);
     // success!
     if ($stmt !== false) {
         // set-up our response array
         $slider_response = array('slider_id' => $pdo->lastInsertId(), 'status' => 'success', 'action' => 'insert');
         $slider_response = array_merge(self::$slider, $slider_response);
         // pass the response array to our response object
         parent::$response_obj->set_slider_response($slider_response, parent::$question);
         // see if we we're adding a slider in here...
         if (self::$user_action_action === 'add' && self::$user_action_element === 'slider') {
             // we added a slider successfully, let them know!
             parent::$response_obj->add_success('Slider added to Question #' . (parent::$question['question_order'] + 1) . '.');
         }
     } else {
         parent::$response_obj->add_error('Question #' . (parent::$question['question_order'] + 1) . ' could not add a Slider.');
     }
 }