public function onAfterStepModified($model, $validData, $id = null) { $details = $this->getDetails($id, $model); $app = JFactory::getApplication(); $showMsgsFrontend = $this->params->get('messagesfrontend') && !$app->isAdmin(); $showMsgsBackend = $this->params->get('messagesbackend') && $app->isAdmin(); $step = CitybrandingFrontendHelper::getStepByStepId($validData['stepid']); $MENUALIAS = $this->params->get('menualias'); $appSite = JApplication::getInstance('site'); $router = $appSite->getRouter(); $uri = $router->build('index.php?option=com_citybranding&view=poi&id=' . (int) ($id == null ? $validData['id'] : $id)); $parsed_url = $uri->toString(); $parsed_url = str_replace('administrator/', '', $parsed_url); $parsed_url = str_replace('component/citybranding', $MENUALIAS, $parsed_url); $poiLink = $_SERVER['HTTP_HOST'] . $parsed_url; //Prepare email for admins if ($this->params->get('mailstatuschangeadmins')) { $subject = sprintf(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_ADMINS_STEP_MODIFIED_SUBJECT'), $id == null ? $validData['id'] : $id); $body = sprintf(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_ADMINS_STEP_MODIFIED_BODY'), $validData['title'], $step['stepid_title'], JFactory::getUser()->name); if (empty($details->emails) || $details->emails[0] == '') { if ($showMsgsBackend) { $app->enqueueMessage(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_ADMINS_MAIL_NOT_SET') . CitybrandingFrontendHelper::getCategoryNameByCategoryId($validData['catid']), 'warning'); } } else { $recipients = implode(',', $details->emails); if ($this->sendMail($subject, $body, $details->emails)) { if ($showMsgsBackend) { $app->enqueueMessage(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_ADMINS_MAIL_CONFIRM') . $recipients); } } else { if ($showMsgsBackend) { $app->enqueueMessage(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_MAIL_FAILED') . $recipients, 'error'); } } } } //Prepare email for user if ($this->params->get('mailstatuschangeuser')) { $subject = sprintf(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_USER_STEP_MODIFIED_SUBJECT'), $id == null ? $validData['id'] : $id); $body = sprintf(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_USER_STEP_MODIFIED_BODY'), $validData['title'], $step['stepid_title'], $poiLink); $body .= '<a href="http://' . $poiLink . '">' . $poiLink . '</a>'; if ($this->sendMail($subject, $body, $details->usermail)) { if ($showMsgsBackend) { $app->enqueueMessage(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_MAIL_STEP_MODIFIED_CONFIRM') . $details->usermail . ' (' . $details->username . ')'); } if ($showMsgsFrontend) { $app->enqueueMessage(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_MAIL_STEP_MODIFIED_CONFIRM') . $details->usermail . ' (' . $details->username . ')'); } } else { $app->enqueueMessage(JText::_('PLG_CITYBRANDING_MAIL_NOTIFIER_MAIL_FAILED') . $recipients, 'error'); } } }
protected function postSaveHook(JModelLegacy $model, $validData = array()) { //A: inform log table about the new poi if ($validData['id'] == 0) { $log = JTable::getInstance('Log', 'CitybrandingTable', array()); $catTitle = CitybrandingFrontendHelper::getCategoryNameByCategoryId($validData['catid']); $data2['id'] = 0; $data2['state'] = 1; $data2['action'] = JText::_('COM_CITYBRANDING_LOGS_ACTION_INITIAL_COMMIT'); $data2['poiid'] = $model->getItem()->get('id'); $data2['stepid'] = $validData['stepid']; $data2['description'] = JText::_('COM_CITYBRANDING_LOGS_ACTION_INITIAL_COMMIT') . ' ' . JText::_('COM_CITYBRANDING_LOGS_AT_CATEGORY') . ' ' . $catTitle; $data2['created'] = $validData['created']; $data2['created_by'] = $validData['created_by']; $data2['updated'] = $validData['created']; $data2['language'] = $validData['language']; $data2['rules'] = $validData['rules']; if (!$log->bind($data2)) { JFactory::getApplication()->enqueueMessage('Cannot bind data to log table', 'error'); } if (!$log->save($data2)) { JFactory::getApplication()->enqueueMessage('Cannot save data to log table', 'error'); } try { $dispatcher = JEventDispatcher::getInstance(); $results = $dispatcher->trigger('onAfterNewPoiAdded', array($model, $validData)); // Check the returned results. This is for plugins that don't throw // exceptions when they encounter serious errors. if (in_array(false, $results)) { throw new Exception($dispatcher->getError(), 500); } } catch (Exception $e) { // Handle a caught exception. throw $e; } } else { //a. check for step modification if (isset($validData['is_step_modified']) && $validData['is_step_modified'] === 'true') { $user = JFactory::getUser(); $log = JTable::getInstance('Log', 'CitybrandingTable', array()); $data2['id'] = 0; $data2['state'] = 1; $data2['action'] = JText::_('COM_CITYBRANDING_LOGS_ACTION_STEP_MODIFIED'); $data2['poiid'] = $validData['id']; $data2['stepid'] = $validData['stepid']; $data2['description'] = $validData['step_modified_description']; $data2['created'] = $validData['updated']; $data2['created_by'] = $user->id; $data2['updated'] = $validData['updated']; $data2['language'] = $validData['language']; $data2['rules'] = $validData['rules']; if (!$log->bind($data2)) { JFactory::getApplication()->enqueueMessage('Cannot bind data to log table', 'error'); } if (!$log->save($data2)) { JFactory::getApplication()->enqueueMessage('Cannot save data to log table', 'error'); } $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onAfterStepModified', array($model, $validData)); } //b. check for category modification if (isset($validData['is_category_modified']) && $validData['is_category_modified'] === 'true') { $user = JFactory::getUser(); $log = JTable::getInstance('Log', 'CitybrandingTable', array()); $data2['id'] = 0; $data2['state'] = 1; $data2['action'] = JText::_('COM_CITYBRANDING_LOGS_ACTION_CATEGORY_MODIFIED'); $data2['poiid'] = $validData['id']; $data2['stepid'] = $validData['stepid']; $data2['description'] = $validData['category_modified_description']; $data2['created'] = $validData['updated']; $data2['created_by'] = $user->id; $data2['updated'] = $validData['updated']; $data2['language'] = $validData['language']; $data2['rules'] = $validData['rules']; if (!$log->bind($data2)) { JFactory::getApplication()->enqueueMessage('Cannot bind data to log table', 'error'); } if (!$log->save($data2)) { JFactory::getApplication()->enqueueMessage('Cannot save data to log table', 'error'); } $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onAfterCategoryModified', array($model, $validData)); } } //B: move any images only if record is new if ($validData['id'] == 0) { //check if any files uploaded $obj = json_decode($validData['photo']); if (empty($obj->files)) { return; } $srcDir = JPATH_ROOT . '/' . $obj->imagedir . '/' . $obj->id; $dstDir = JPATH_ROOT . '/' . $obj->imagedir . '/' . $model->getItem()->get('id'); $success = rename($srcDir, $dstDir); if ($success) { //update photo json isnew, id unset($obj->isnew); $obj->id = $model->getItem()->get('id'); $photo = json_encode($obj); // Create an object for the record we are going to update. $object = new stdClass(); $object->id = $model->getItem()->get('id'); $object->photo = $photo; // Update photo $result = JFactory::getDbo()->updateObject('#__citybranding_pois', $object, 'id'); } else { JFactory::getApplication()->enqueueMessage('Cannot move ' . $srcDir . ' to ' . $dstDir . '. Check folder rights', 'error'); } } }
public function poi() { $result = null; $app = JFactory::getApplication(); try { $userid = self::validateRequest(); //get necessary arguments $id = $app->input->getInt('id', null); switch ($app->input->getMethod()) { //fetch existing poi case 'GET': if ($id == null) { throw new Exception('Id is not set'); } //get poi model $poiModel = JModelLegacy::getInstance('Poi', 'CitybrandingModel', array('ignore_request' => true)); //handle unexpected warnings from model set_error_handler(array($this, 'exception_error_handler')); $data = $poiModel->getData($id); restore_error_handler(); if (!is_object($data)) { throw new Exception('Poi does not exist'); } $result = CitybrandingFrontendHelper::sanitizePoi($data, $userid); //check for any restrictions if (!$result->myPoi && $result->moderation) { throw new Exception('Poi is under moderation'); } if ($result->state != 1) { throw new Exception('Poi is not published'); } //be consistent return as array (of size 1) $result = array($result); break; //create new poi //create new poi case 'POST': if ($id != null) { throw new Exception('You cannot use POST to fetch poi. Use GET instead'); } //guests are not allowed to post pois //TODO: get this from settings if ($userid == 0) { throw new Exception('Guests are now allowed to post new pois'); } //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')); CitybrandingFrontendHelper::checkNullArguments($args); //check if category exists if (is_null(CitybrandingFrontendHelper::getCategoryNameByCategoryId($args['catid']))) { throw new Exception('Category does not exist'); } $args['userid'] = $userid; $args['created_by'] = $userid; $args['stepid'] = CitybrandingFrontendHelper::getPrimaryStepId(); $args['id'] = 0; $args['created'] = CitybrandingFrontendHelper::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; $tmpTime = time(); //used for temporary id $imagedir = 'images/citybranding'; //check if post contains files $file = $app->input->files->get('files'); if (!empty($file)) { require_once JPATH_ROOT . '/components/com_citybranding/models/fields/multiphoto/server/UploadHandler.php'; $options = array('script_url' => JRoute::_(JURI::root(true) . '/administrator/index.php?option=com_citybranding&task=upload.handler&format=json&id=' . $tmpTime . '&imagedir=' . $imagedir . '&' . JSession::getFormToken() . '=1'), 'upload_dir' => JPATH_ROOT . '/' . $imagedir . '/' . $tmpTime . '/', 'upload_url' => JURI::root(true) . '/' . $imagedir . '/' . $tmpTime . '/', 'param_name' => 'files', 'citybranding_api' => true); $upload_handler = new UploadHandler($options); if (isset($upload_handler->citybranding_api)) { $files_json = json_decode($upload_handler->citybranding_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('Upload failed'); } } else { $args['photo'] = json_encode(array('isnew' => 1, 'id' => $tmpTime, 'imagedir' => $imagedir, 'files' => array())); } //get poiForm model and save $poiFormModel = JModelLegacy::getInstance('PoiForm', 'CitybrandingModel', array('ignore_request' => true)); //handle unexpected warnings from model set_error_handler(array($this, 'exception_error_handler')); $poiFormModel->save($args); $insertid = JFactory::getApplication()->getUserState('com_citybranding.edit.poi.insertid'); //call post save hook require_once JPATH_COMPONENT . '/controllers/poiform.php'; $poiFormController = new CitybrandingControllerPoiForm(); $poiFormController->postSaveHook($poiFormModel, $args); restore_error_handler(); $result = array('poiid' => $insertid); break; //update existing poi //update existing poi 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, 'Poi action completed successfully'); } catch (Exception $e) { header("HTTP/1.0 202 Accepted"); echo new JResponseJson($e); } }
?> <span style="color: <?php echo $step['stepid_color']; ?> "><?php echo $step['stepid_title']; ?> </span> </p> <p><strong><?php echo JText::_('COM_CITYBRANDING_FORM_LBL_POI_CATID'); ?> </strong>: <?php echo CitybrandingFrontendHelper::getCategoryNameByCategoryId($this->item->catid); ?> </p> <p><strong><?php echo JText::_('COM_CITYBRANDING_FORM_LBL_POI_ADDRESS'); ?> </strong>: <?php echo $this->item->address; ?> </p> <p><strong><?php echo JText::_('COM_CITYBRANDING_FORM_LBL_POI_DESCRIPTION'); ?>