コード例 #1
0
 /**
  * Toggles whether the user is checked in or not.
  *
  * @param \WP_REST_Request $request
  * @return \WP_Error|\WP_REST_Response
  */
 protected function _create_checkin_checkout_object(\WP_REST_Request $request)
 {
     $reg_id = $request->get_param('REG_ID');
     $dtt_id = $request->get_param('DTT_ID');
     $force = $request->get_param('force');
     if ($force == 'true') {
         $force = true;
     } else {
         $force = false;
     }
     $reg = \EEM_Registration::instance()->get_one_by_ID($reg_id);
     if (!$reg instanceof \EE_Registration) {
         return $this->send_response(new \WP_Error('rest_registration_toggle_checkin_invalid_id', sprintf(__('You cannot checkin registration with ID %1$s because it doesn\'t exist.', 'event_espresso'), $reg_id), array('status' => 422)));
     }
     if (!\EE_Capabilities::instance()->current_user_can('ee_edit_checkin', 'rest_api_checkin_endpoint', $reg_id)) {
         return $this->send_response(new \WP_Error('rest_user_cannot_toggle_checkin', sprintf(__('You are not allowed to checkin registration with ID %1$s.', 'event_espresso'), $reg_id), array('status' => 403)));
     }
     $success = $reg->toggle_checkin_status($dtt_id, !$force);
     if ($success === false) {
         //rely on EE_Error::add_error messages to have been added to give more data about hwy it failed
         return $this->send_response(new \WP_Error('rest_toggle_checkin_failed', __('Registration checkin failed. Please see additional error data.', 'event_espresso')));
     }
     $checkin = \EEM_Checkin::instance()->get_one(array(array('REG_ID' => $reg_id, 'DTT_ID' => $dtt_id), 'order_by' => array('CHK_timestamp' => 'DESC')));
     if (!$checkin instanceof \EE_Checkin) {
         return $this->send_response(new \WP_Error('rest_toggle_checkin_error', sprintf(__('Supposedly we created a new checkin object for registration %1$s at datetime %2$s, but we can\'t find it.', 'event_espresso'), $reg_id, $dtt_id)));
     }
     $requested_version = $this->get_requested_version($request->get_route());
     $get_request = new \WP_REST_Request('GET', \EED_Core_Rest_Api::ee_api_namespace . $requested_version . '/checkins/' . $checkin->ID());
     $get_request->set_url_params(array('id' => $checkin->ID()));
     return Read::handle_request_get_one($get_request);
 }
コード例 #2
0
 /**
  * 		This function is a singleton method used to instantiate the EEM_Checkin object
  *
  * 		@access public
  * 		@param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any incoming timezone data that gets saved).  Note this just sends the timezone info to the date time model field objects.  Default is NULL (and will be assumed using the set timezone in the 'timezone_string' wp option)
  * 		@return EEM_Checkin instance
  */
 public static function instance($timezone = NULL)
 {
     // check if instance of EEM_Checkin already exists
     if (self::$_instance === NULL) {
         // instantiate Price_model
         self::$_instance = new self($timezone);
     }
     //set timezone if we have in incoming string
     if (!empty($timezone)) {
         self::$_instance->set_timezone($timezone);
     }
     // EEM_Checkin object
     return self::$_instance;
 }
コード例 #3
0
 /**
  * This method verifies whether the user can checkin for the given datetime considering the max uses value set on the ticket.
  *
  * To do this,  a query is done to get the count of the datetime records already checked into.  If the datetime given does
  * not have a check-in record and checking in for that datetime will exceed the allowed uses, then return false.  Otherwise return true.
  *
  * @param int | EE_Datetime  $DTT_OR_ID  The datetime the registration is being checked against
  * @return bool   true means can checkin.  false means cannot checkin.
  */
 public function verify_can_checkin_against_TKT_uses($DTT_OR_ID)
 {
     $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
     if (!$DTT_ID) {
         return false;
     }
     $max_uses = $this->ticket() instanceof EE_Ticket ? $this->ticket()->uses() : EE_INF;
     // if max uses is not set or equals infinity then return true cause its not a factor for whether user can check-in
     // or not.
     if (!$max_uses || $max_uses === EE_INF) {
         return true;
     }
     //does this datetime have a checkin record?  If so, then the dtt count has already been verified so we can just
     //go ahead and toggle.
     if (EEM_Checkin::instance()->exists(array(array('REG_ID' => $this->ID(), 'DTT_ID' => $DTT_ID)))) {
         return true;
     }
     //made it here so the last check is whether the number of checkins per unique datetime on this registration
     //disallows further check-ins.
     $count_unique_dtt_checkins = EEM_Checkin::instance()->count(array(array('REG_ID' => $this->ID(), 'CHK_in' => true)), 'DTT_ID', true);
     // checkins have already reached their max number of uses
     // so registrant can NOT checkin
     if ($count_unique_dtt_checkins >= $max_uses) {
         EE_Error::add_error(__('Check-in denied because number of datetime uses for the ticket has been reached or exceeded.', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__);
         return false;
     }
     return true;
 }
 /**
  * Deletes a single EE_Checkin row
  * @return void
  */
 protected function _delete_checkin_row()
 {
     $query_args = array('action' => 'registration_checkins', 'DTT_ID' => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : 0, '_REGID' => isset($this->_req_data['_REGID']) ? $this->_req_data['_REGID'] : 0);
     if (!empty($this->_req_data['CHK_ID'])) {
         if (!EEM_Checkin::instance()->delete_by_ID($this->_req_data['CHK_ID'])) {
             EE_Error::add_error(__('Something went wrong and this check-in record was not deleted', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__);
         } else {
             EE_Error::add_success(__('Check-In record successfully deleted', 'event_espresso'));
         }
     } else {
         EE_Error::add_error(__('In order to delete a Check-in record, there must be a Check-In ID available. There is not. It is not your fault, there is just a gremlin living in the code', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__);
     }
     $this->_redirect_after_action(FALSE, '', '', $query_args, TRUE);
 }
 /**
  * This retrieves all the Check-ins for the given parameters.
  * experimenting with having the query for the table values within the list table.
  *
  * @access protected
  * @param int     $per_page     How many to retrieve per page
  * @param bool    $count        Whether to return a count or not
  * @return EE_Checkin[]|int
  */
 protected function _get_checkins($per_page = 10, $count = FALSE)
 {
     $REG_ID = isset($this->_req_data['_REGID']) ? $this->_req_data['_REGID'] : FALSE;
     $DTT_ID = isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : FALSE;
     //if user does not have the capability for the checkins for this registration then get out!
     if (!EE_Registry::instance()->CAP->current_user_can('ee_read_checkin', 'espresso_registrations_registration_checkins', $REG_ID)) {
         return $count ? 0 : array();
     }
     //if no reg id then get out cause need a reg id
     if (empty($REG_ID) || empty($DTT_ID)) {
         throw new EE_Error(__('This route cannot be viewed unless registration and datetime IDs are included in the request (via REG_ID and DTT_ID parameters)', 'event_espresso'));
     }
     //set orderby
     $orderby = 'CHK_timestamp';
     //note that with this table we're only providing the option to orderby the timestamp value.
     $order = !empty($this->_req_data['order']) ? $this->_req_data['order'] : 'ASC';
     $current_page = isset($this->_req_data['paged']) && !empty($this->_req_data['paged']) ? $this->_req_data['paged'] : 1;
     $per_page = isset($this->_req_data['perpage']) && !empty($this->_req_data['perpage']) ? $this->_req_data['perpage'] : $per_page;
     $limit = NULL;
     if (!$count) {
         $offset = ($current_page - 1) * $per_page;
         $limit = array($offset, $per_page);
     }
     $_where = array('REG_ID' => $REG_ID, 'DTT_ID' => $DTT_ID);
     $query_params = array($_where, 'order_by' => array($orderby => $order), 'limit' => $limit);
     //if no per_page value then we just want to return a count of all Check-ins
     if ($count) {
         return EEM_Checkin::instance()->count(array($_where));
     }
     return $count ? EEM_Checkin::instance()->count(array($_where)) : EEM_Checkin::instance()->get_all($query_params);
 }
コード例 #6
0
 public function test_prepare_for_pretty_echoing()
 {
     $a_boolean_field = EEM_Checkin::instance()->field_settings_for('CHK_in');
     $this->assertEquals(__('Yes', 'event_espresso'), $a_boolean_field->prepare_for_pretty_echoing(true));
     $this->assertEquals(__('No', 'event_espresso'), $a_boolean_field->prepare_for_pretty_echoing(false));
 }
コード例 #7
0
 /**
  *  Count registrations checked into (or out of) an event.
  *
  * @param int $EVT_ID event ID
  * @param boolean $checked_in whether to count registrations checked IN or OUT
  * @return int
  */
 public function count_registrations_checked_into_event($EVT_ID, $checked_in = true)
 {
     global $wpdb;
     //subquery to get latest checkin
     $query = $wpdb->prepare('SELECT ' . 'COUNT( DISTINCT checkins.REG_ID ) ' . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN' . '( SELECT ' . 'max( CHK_timestamp ) AS latest_checkin, ' . 'REG_ID AS REG_ID ' . 'FROM ' . EEM_Checkin::instance()->table() . ' AS c ' . 'INNER JOIN ' . EEM_Datetime::instance()->table() . ' AS d ' . 'ON c.DTT_ID=d.DTT_ID ' . 'WHERE d.EVT_ID=%d ' . 'GROUP BY REG_ID' . ') AS most_recent_checkin_per_reg ' . 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID ' . 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin ' . 'WHERE ' . 'checkins.CHK_in=%d', $EVT_ID, $checked_in);
     return (int) $wpdb->get_var($query);
 }