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); } }
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); } }