예제 #1
0
 /**
  * This function query the status of the ticket of a queue, if it is unsolved returns NULL,
  * but if it is solved it will get the data to be sync in the client. 
  *
  * @return  mixed    returns an array with the data to be sync in the client, or NULL it the ticket
  *			 is unsolved or false if an error exists
  */
 protected function getData()
 {
     global $arrConf;
     $dbCalendar = $this->_getDB($arrConf['dsn_conn_database']);
     $pCalendar = new paloSantoCalendar($dbCalendar);
     $data_ticket = $pCalendar->getDataTicket($this->_ticket, $this->_id_user);
     if (is_null($data_ticket)) {
         $this->errMsg["fc"] = 'DBERROR';
         $this->errMsg["fm"] = 'Database operation failed';
         $this->errMsg["fd"] = 'Unable to write data - ' . $pCalendar->_DB->errMsg;
         $this->errMsg["cn"] = get_class($pCalendar);
         return false;
     } elseif (!$data_ticket) {
         $this->errMsg["fc"] = 'PARAMERROR';
         $this->errMsg["fm"] = 'Wrong ticket';
         $this->errMsg["fd"] = "The ticket {$this->_ticket} does not exist or does not belong to you";
         $this->errMsg["cn"] = get_class($pCalendar);
         return false;
     } else {
         if ($data_ticket["status"] != "OK") {
             return null;
         } else {
             $result["status"] = "OK";
             $json = new Services_JSON();
             $data = $json->decode($data_ticket["data"]);
             if (!isset($data->last_sync) || !isset($data->events)) {
                 $remove_queue = $pCalendar->removeQueue($this->_ticket);
                 if ($remove_queue === false) {
                     $this->errMsg["fc"] = 'DBERROR';
                     $this->errMsg["fm"] = 'Database operation failed';
                     $this->errMsg["fd"] = 'Unable to delete data - ' . $pCalendar->_DB->errMsg;
                     $this->errMsg["cn"] = get_class($pCalendar);
                     return false;
                 }
                 $this->errMsg["fc"] = 'PARAMERROR';
                 $this->errMsg["fm"] = 'Wrong data';
                 $this->errMsg["fd"] = "The data of the ticket {$this->_ticket} is wrong or corrupted. This data has to be a JSON string containing the keywords \"last_sync\" and \"contacts\". The ticket will be deleted";
                 $this->errMsg["cn"] = get_class($pCalendar);
                 return false;
             }
             if (!is_array($data->events)) {
                 $remove_queue = $pCalendar->removeQueue($this->_ticket);
                 if ($remove_queue === false) {
                     $this->errMsg["fc"] = 'DBERROR';
                     $this->errMsg["fm"] = 'Database operation failed';
                     $this->errMsg["fd"] = 'Unable to delete data - ' . $pCalendar->_DB->errMsg;
                     $this->errMsg["cn"] = get_class($pCalendar);
                     return false;
                 }
                 $this->errMsg["fc"] = 'PARAMERROR';
                 $this->errMsg["fm"] = 'Wrong data';
                 $this->errMsg["fd"] = "The data of the contacts in ticket {$this->_ticket} is wrong or corrupted. It has to be an array. The ticket will be deleted";
                 $this->errMsg["cn"] = get_class($pCalendar);
                 return false;
             }
             $last_sync = $data->last_sync;
             if (isset($data_ticket["response_data"]) && !empty($data_ticket["response_data"])) {
                 $response_data = $json->decode($data_ticket["response_data"]);
             } else {
                 $response_data = array();
             }
             $events = $pCalendar->getEventsAfterSync($last_sync, $data->events, $this->_id_user, $response_data);
             if ($events === false) {
                 $this->errMsg["fc"] = 'DBERROR';
                 $this->errMsg["fm"] = 'Database operation failed';
                 $this->errMsg["fd"] = 'Unable to get data - ' . $pCalendar->_DB->errMsg;
                 $this->errMsg["cn"] = get_class($pCalendar);
                 return false;
             } else {
                 $remove_queue = $pCalendar->removeQueue($this->_ticket);
                 if ($remove_queue === false) {
                     $this->errMsg["fc"] = 'DBERROR';
                     $this->errMsg["fm"] = 'Database operation failed';
                     $this->errMsg["fd"] = 'Unable to delete data - ' . $pCalendar->_DB->errMsg;
                     $this->errMsg["cn"] = get_class($pCalendar);
                     return false;
                 } else {
                     $result["last_sync"] = time();
                     $result["events"] = $events;
                     return $result;
                 }
             }
         }
     }
 }