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');
         }
     }
 }
示例#2
0
 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');
?>