Exemple #1
0
 public function issue()
 {
     $result = null;
     $app = JFactory::getApplication();
     try {
         $userid = self::validateRequest();
         //get necessary arguments
         $id = $app->input->getInt('id', null);
         switch ($app->input->getMethod()) {
             //fetch existing issue
             case 'GET':
                 if ($id == null) {
                     throw new Exception('Id is not set');
                 }
                 //get issue model
                 $issueModel = JModelLegacy::getInstance('Issue', 'ImcModel', array('ignore_request' => true));
                 $logsModel = JModelLegacy::getInstance('Logs', 'ImcModel', array('ignore_request' => true));
                 //handle unexpected warnings from model
                 set_error_handler(array($this, 'exception_error_handler'));
                 $data = $issueModel->getData($id);
                 //merge logs as timeline
                 if (is_object($data)) {
                     $data->timeline = $logsModel->getItemsByIssue($id);
                     $votesModel = JModelLegacy::getInstance('Votes', 'ImcModel', array('ignore_request' => true));
                     $data->hasVoted = $votesModel->hasVoted($data->id, $userid);
                 }
                 restore_error_handler();
                 if (!is_object($data)) {
                     throw new Exception(JText::_('COM_IMC_API_ISSUE_NOT_EXIST'));
                 }
                 $result = ImcFrontendHelper::sanitizeIssue($data, $userid);
                 //check for any restrictions
                 if (!$result->myIssue && $result->moderation) {
                     throw new Exception(JText::_('COM_IMC_API_ISSUE_UNDER_MODERATION'));
                 }
                 if ($result->state != 1) {
                     throw new Exception(JText::_('COM_IMC_API_ISSUE_NOT_PUBLISHED'));
                 }
                 //be consistent return as array (of size 1)
                 $result = array($result);
                 break;
                 //create new issue
             //create new issue
             case 'POST':
                 if ($id != null) {
                     throw new Exception('You cannot use POST to fetch issue. Use GET instead');
                 }
                 //guests are not allowed to post issues
                 //TODO: get this from settings
                 if ($userid == 0) {
                     throw new Exception(JText::_('COM_IMC_API_NO_GUESTS_NO_POST'));
                 }
                 //get necessary arguments
                 $args = array('catid' => $app->input->getInt('catid'), 'title' => $app->input->getString('title'), 'description' => $app->input->getString('description'), 'address' => $app->input->getString('address'), 'latitude' => $app->input->getString('lat'), 'longitude' => $app->input->getString('lng'));
                 ImcFrontendHelper::checkNullArguments($args);
                 //check if category exists
                 if (is_null(ImcFrontendHelper::getCategoryNameByCategoryId($args['catid'], true))) {
                     throw new Exception(JText::_('COM_IMC_API_CATEGORY_NOT_EXIST'));
                 }
                 $args['userid'] = $userid;
                 $args['created_by'] = $userid;
                 $args['stepid'] = ImcFrontendHelper::getPrimaryStepId();
                 $args['id'] = 0;
                 $args['created'] = ImcFrontendHelper::convert2UTC(date('Y-m-d H:i:s'));
                 $args['updated'] = $args['created'];
                 $args['note'] = 'modality=' . $app->input->getInt('m_id');
                 $args['language'] = '*';
                 $args['subgroup'] = 0;
                 $m_id = $app->input->getInt('m_id', 0);
                 $args['modality'] = $m_id;
                 $tmpTime = time();
                 //used for temporary id
                 $imagedir = 'images/imc';
                 //check if post contains files
                 $file = $app->input->files->get('files');
                 if (!empty($file)) {
                     require_once JPATH_ROOT . '/components/com_imc/models/fields/multiphoto/server/UploadHandler.php';
                     $options = array('script_url' => JRoute::_(JURI::root(true) . '/administrator/index.php?option=com_imc&task=upload.handler&format=json&id=' . $tmpTime . '&imagedir=' . $imagedir . '&' . JSession::getFormToken() . '=1'), 'upload_dir' => JPATH_ROOT . '/' . $imagedir . '/' . $tmpTime . '/', 'upload_url' => $imagedir . '/' . $tmpTime . '/', 'param_name' => 'files', 'imc_api' => true);
                     $upload_handler = new UploadHandler($options);
                     if (isset($upload_handler->imc_api)) {
                         $files_json = json_decode($upload_handler->imc_api);
                         $args['photo'] = json_encode(array('isnew' => 1, 'id' => $tmpTime, 'imagedir' => $imagedir, 'files' => $files_json->files));
                         $app->enqueueMessage('File(s) uploaded successfully', 'info');
                     } else {
                         throw new Exception(JText::_('COM_IMC_API_UPLOAD_FAILED'));
                     }
                 } else {
                     $args['photo'] = json_encode(array('isnew' => 1, 'id' => $tmpTime, 'imagedir' => $imagedir, 'files' => array()));
                 }
                 //get issueForm model and save
                 $issueFormModel = JModelLegacy::getInstance('IssueForm', 'ImcModel', array('ignore_request' => true));
                 //handle unexpected warnings from model
                 set_error_handler(array($this, 'exception_error_handler'));
                 $issueFormModel->save($args);
                 $insertid = JFactory::getApplication()->getUserState('com_imc.edit.issue.insertid');
                 //call post save hook
                 require_once JPATH_COMPONENT . '/controllers/issueform.php';
                 $issueFormController = new ImcControllerIssueForm();
                 $issueFormController->postSaveHook($issueFormModel, $args);
                 restore_error_handler();
                 $result = array('issueid' => $insertid);
                 //be consistent return as array (of size 1)
                 $result = array($result);
                 break;
                 //update existing issue
             //update existing issue
             case 'PUT':
             case 'PATCH':
                 if ($id == null) {
                     throw new Exception('Id is not set');
                 }
                 break;
             default:
                 throw new Exception('HTTP method is not supported');
         }
         echo new JResponseJson($result, 'Issue action completed successfully');
     } catch (Exception $e) {
         header("HTTP/1.0 202 Accepted");
         echo new JResponseJson($e);
     }
 }
Exemple #2
0
 public function issue()
 {
     $result = null;
     $app = JFactory::getApplication();
     try {
         $userid = self::validateRequest();
         //get necessary arguments
         $id = $app->input->getInt('id', null);
         switch ($app->input->getMethod()) {
             //fetch existing issue
             case 'GET':
                 if ($id == null) {
                     throw new Exception('Id is not set');
                 }
                 //get issue model
                 $issueModel = JModelLegacy::getInstance('Issue', 'ImcModel', array('ignore_request' => true));
                 //handle unexpected warnings from model
                 set_error_handler(array($this, 'exception_error_handler'));
                 $data = $issueModel->getData($id);
                 restore_error_handler();
                 if (!is_object($data)) {
                     throw new Exception('Issue does not exist');
                 }
                 $result = ImcFrontendHelper::sanitizeIssue($data, $userid);
                 //check for any restrictions
                 if (!$result->myIssue && $result->moderation) {
                     throw new Exception('Issue is under moderation');
                 }
                 if ($result->state != 1) {
                     throw new Exception('Issue is not published');
                 }
                 //be consistent return as array (of size 1)
                 $result = array($result);
                 break;
                 //create new issue
             //create new issue
             case 'POST':
                 if ($id != null) {
                     throw new Exception('You cannot use POST to fetch issue. Use GET instead');
                 }
                 //get necessary arguments
                 $args = array('catid' => $app->input->getInt('catid'), 'title' => $app->input->getString('title'), 'description' => $app->input->getString('description'), 'address' => $app->input->getString('address'), 'latitude' => $app->input->getString('lat'), 'longitude' => $app->input->getString('lng'));
                 ImcFrontendHelper::checkNullArguments($args);
                 $args['userid'] = $userid;
                 $args['created_by'] = $userid;
                 $args['stepid'] = ImcFrontendHelper::getPrimaryStepId();
                 $args['id'] = 0;
                 $args['created'] = date('Y-m-d H:i:s');
                 $args['updated'] = $args['created'];
                 $args['language'] = '*';
                 $args['note'] = 'modality=' . $app->input->getInt('m_id');
                 $args['subgroup'] = 0;
                 $args['photo'] = json_encode(array('isnew' => 1, 'id' => time(), 'imagedir' => 'images/imc', 'files' => array()), JSON_UNESCAPED_SLASHES);
                 // '{"isnew":1,"id":1440286789,"imagedir":"images/imc","files":[]}';
                 //get issueForm model
                 //JModelLegacy::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/models');
                 $issueFormModel = JModelLegacy::getInstance('IssueForm', 'ImcModel', array('ignore_request' => true));
                 //handle unexpected warnings from model
                 set_error_handler(array($this, 'exception_error_handler'));
                 $issueFormModel->save($args);
                 $insertid = JFactory::getApplication()->getUserState('com_imc.edit.issue.insertid');
                 //call post save hook
                 require_once JPATH_COMPONENT . '/controllers/issueform.php';
                 $issueFormController = new ImcControllerIssueForm();
                 $issueFormController->postSaveHook($issueFormModel, $args);
                 restore_error_handler();
                 $result = 'Newly submitted issue ID is ' . $insertid;
                 break;
                 //update existing issue
             //update existing issue
             case 'PUT':
             case 'PATCH':
                 if ($id == null) {
                     throw new Exception('Id is not set');
                 }
                 break;
             default:
                 throw new Exception('HTTP method is not supported');
         }
         echo new JResponseJson($result, 'Issue action completed successfully');
     } catch (Exception $e) {
         echo new JResponseJson($e);
     }
 }