/** * Method override to check if you can add a new record. * * @param array An array of input data. * * @return boolean */ protected function allowAdd($data = array()) { $jinput = JFactory::getApplication()->input; // Initialise variables. $user = JFactory::getUser(); $categoryId = JArrayHelper::getValue($data, 'catid', $jinput->getInt('catid'), 'int'); $allow = null; if ($categoryId) { // If the category has been passed in the data or URL check it. $allow = $user->authorise('core.create', 'com_jem.category.' . $categoryId); } $jemsettings = JEMHelper::config(); $maintainer = JEMUser::ismaintainer('add'); $genaccess = JEMUser::validate_user($jemsettings->evdelrec, $jemsettings->delivereventsyes); $valguest = JEMUser::validate_guest(); if ($maintainer || $genaccess || $valguest) { return true; } if ($allow === null) { // In the absense of better information, revert to the component permissions. return parent::allowAdd(); } else { return $allow; } }
protected function getOptions() { // Initialise variables. $options = array(); $published = $this->element['published'] ? $this->element['published'] : array(0, 1); $name = (string) $this->element['name']; $action = (string) $this->element['action']; $frontedit = $this->element['frontedit']; $jinput = JFactory::getApplication()->input; $db = JFactory::getDbo(); $a_id = $jinput->get('a_id', null); // retrieve data if ($frontedit) { $user = JFactory::getUser(); $jemsettings = JEMHelper::config(); $userid = (int) $user->get('id'); $superuser = JEMUser::superuser(); $levels = $user->getAuthorisedViewLevels(); $settings = JemHelper::globalattribs(); $guestcat = $settings->get('guest_category', '0'); $jinput = JFactory::getApplication()->input; $valguest = JEMUser::validate_guest(); $name = (string) $this->element['name']; $db = JFactory::getDbo(); $auth_joomlagr = $user->getAuthorisedGroups(); $oldCat = 0; $query = $db->getQuery(true)->select('a.id AS value, a.catname AS text, a.level, a.published')->from('#__jem_categories AS a')->join('LEFT', $db->quoteName('#__jem_categories') . ' AS b ON a.lft > b.lft AND a.rgt < b.rgt'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif (is_array($published)) { JArrayHelper::toInteger($published); $query->where('a.published IN (' . implode(',', $published) . ')'); } // specific code if (!$valguest) { $validated = false; if ($superuser) { // no need to restrict to category's $validated = true; } if (!$validated) { // in this case it's going to be difficult // catch the groupnumber of the user+add rights $query2 = $db->getQuery(true); $query2->select(array('gr.id')); $query2->from($db->quoteName('#__jem_groups') . ' AS gr'); $query2->join('LEFT', '#__jem_groupmembers AS g ON g.group_id = gr.id'); $query2->where(array('g.member = ' . (int) $user->get('id'), $db->quoteName('gr.addevent') . ' =1', 'g.member NOT LIKE 0')); $db->setQuery($query2); $groupnumber = $db->loadColumn(); // is the user member of a group with edit rights? if ($groupnumber) { // restrict submission into maintained categories only $query->where(array('a.groupid IN (' . implode(',', $groupnumber) . ')')); } else { return false; } } } else { // $specified guest category $query->where(array('a.id = ' . $guestcat)); } $query->group('a.id, a.catname, a.level, a.lft, a.rgt, a.parent_id, a.published')->order('a.lft ASC'); $db->setQuery($query); } try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage); } // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { // remove root if ($this->element['removeroot'] == true) { if ($options[$i]->level == 0) { unset($options[$i]); continue; } $options[$i]->level = $options[$i]->level - 1; } if ($options[$i]->published == 1) { $options[$i]->text = str_repeat('- ', $options[$i]->level) . $options[$i]->text; } else { $options[$i]->text = str_repeat('- ', $options[$i]->level) . '[' . $options[$i]->text . ']'; } } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; }
/** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * @return mixed A JForm object on success, false on failure * */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_jem.event', 'event', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } $jemsettings = JemHelper::config(); $app = JFactory::getApplication(); if ($app->isAdmin()) { $backend = true; } else { $backend = false; } if ($this->getState('event.id')) { // existing event $pk = $this->getState('event.id'); $item = $this->getItem($pk); if ($item->recurrence_group) { # the event is part of a recurrence_group # # we can disable the dates if needed /* $form->setFieldAttribute('dates', 'disabled', 'true'); */ /* $form->setFieldAttribute('enddates', 'disabled', 'true'); */ } if ($item->recurrence_groupcheck) { # disable recurrence fields $form->removeField('recurrence_count'); $form->removeField('recurrence_exdates'); $form->removeField('recurrence_freq'); $form->removeField('recurrence_interval'); $form->removeField('recurrence_until'); $form->removeField('recurrence_weekday'); } if (!empty($item->meta_keywords)) { $meta_keywords = $item->meta_keywords; } else { $meta_keywords = $jemsettings->meta_keywords; } $form->setFieldAttribute('meta_keywords', 'default', $meta_keywords); if (!empty($item->meta_description)) { $meta_description = $item->meta_description; } else { $meta_description = $jemsettings->meta_description; } $form->setFieldAttribute('meta_description', 'default', $meta_description); } else { // new event // specific backend settings if ($backend) { $settings = JemHelper::globalattribs(); $registering = $settings->get('registering_b'); $form->setFieldAttribute('registra', 'default', $registering); $unregistering = $settings->get('unregistering_b'); $form->setFieldAttribute('unregistra', 'default', $unregistering); } else { $veditevent = JemHelper::viewSettings('veditevent'); $registering = $veditevent->get('registering'); $form->setFieldAttribute('registra', 'default', $registering); $unregistering = $veditevent->get('unregistering'); $form->setFieldAttribute('unregistra', 'default', $unregistering); } $meta_keywords = $jemsettings->meta_keywords; $form->setFieldAttribute('meta_keywords', 'default', $meta_keywords); $meta_description = $jemsettings->meta_description; $form->setFieldAttribute('meta_description', 'default', $meta_description); } $settings = JemHelper::globalattribs(); $valguest = JEMUser::validate_guest(); $asCaptcha = $settings->get('guest_as_captcha', '0'); $asMath = $settings->get('guest_as_math', '0'); if (!$valguest) { $form->removeField('captcha'); $form->removeField('mathquiz'); $form->removeField('mathquiz_answer'); $form->removeField('timeout'); } if ($valguest && !$asMath) { $form->removeField('mathquiz'); $form->removeField('mathquiz_answer'); $form->setFieldAttribute('articletext', 'buttons', 'false'); } if ($valguest && !$asCaptcha) { $form->removeField('captcha'); $form->setFieldAttribute('articletext', 'buttons', 'false'); } return $form; }
/** * Store */ public function store($updateNulls = true) { $date = JFactory::getDate(); $user = JFactory::getUser(); $jinput = JFactory::getApplication()->input; $app = JFactory::getApplication(); $jemsettings = JEMHelper::config(); $settings = JemHelper::globalattribs(); $valguest = JEMUser::validate_guest(); $guest_fldstatus = $settings->get('guest_fldstatus', '0'); // Check if we're in the front or back if ($app->isAdmin()) { $backend = true; } else { $backend = false; } if ($this->id) { // Existing event $this->modified = $date->toSql(); $this->modified_by = $user->get('id'); } else { // New event if (!intval($this->created)) { $this->created = $date->toSql(); } if (empty($this->created_by)) { $this->created_by = $user->get('id'); } } // Check if image was selected jimport('joomla.filesystem.file'); $image_dir = JPATH_SITE . '/images/jem/events/'; $allowable = array('gif', 'jpg', 'png'); $image_to_delete = false; // get image (frontend) - allow "removal on save" (Hoffi, 2014-06-07) if (!$backend) { if ($jemsettings->imageenabled == 2 || $jemsettings->imageenabled == 1) { $file = JFactory::getApplication()->input->files->get('userfile', '', 'array'); $removeimage = JFactory::getApplication()->input->get('removeimage', '', 'int'); if (!empty($file['name'])) { //check the image $check = JEMImage::check($file, $jemsettings); if ($check !== false) { //sanitize the image filename $filename = JemHelper::sanitize($image_dir, $file['name']); $filepath = $image_dir . $filename; if (JFile::upload($file['tmp_name'], $filepath)) { $image_to_delete = $this->datimage; // delete previous image $this->datimage = $filename; } } } elseif (!empty($removeimage)) { // if removeimage is non-zero remove image from event // (file will be deleted later (e.g. housekeeping) if unused) $image_to_delete = $this->datimage; $this->datimage = ''; } } // end image if } // if (!backend) $format = JFile::getExt($image_dir . $this->datimage); if (!in_array($format, $allowable)) { $this->datimage = ''; } if (!$backend) { /* check if the user has the required rank for autopublish */ $maintainer = JEMUser::ismaintainer('publish'); $autopubev = JEMUser::validate_user($jemsettings->evpubrec, $jemsettings->autopubl); if (!($autopubev || $maintainer || $user->authorise('core.edit', 'com_jem'))) { if ($valguest) { $this->published = $guest_fldstatus; } else { $this->published = 0; } } } ################ ## RECURRENCE ## ################ # check if recurrence_groupcheck is true $rec_groupcheck = $jinput->getInt('recurrence_check'); if ($rec_groupcheck) { # the check returned true, so it's considered as an edit # Retrieve id of current event from recurrence_table # as the check was true we can skip the groupid=groupid_ref from the where statement # but to be sure it's added here too $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id'); $query->from($db->quoteName('#__jem_recurrence')); $query->where(array('groupid = groupid_ref ', 'itemid= ' . $this->id)); $db->setQuery($query); $recurrenceid = $db->loadResult(); if ($recurrenceid) { # Retrieve recurrence-table $recurrence_table = JTable::getInstance('Recurrence', 'JEMTable'); # Load row-data $recurrence_table->load($recurrenceid); # We want to skip this event from Ical output /* $recurrence_table->exdate = $this->dates.'T'.$this->times; */ # it's a delete of the set so groupid_ref will be blanked /* $recurrence_table->groupid_ref = ""; */ # it's an edit and not a delete so groupid_ref won't be adjusted # but we will set the recurrence_id field, as this event has been adjusted and contains # info that's not inline with original recurrence-info $var2 = $recurrence_table->startdate_org; $var3 = new JDate($var2); $var4 = $var3->format('Ymd\\THis\\Z'); $recurrence_table->recurrence_id = $var4; # Store fields $recurrence_table->store(); } } # check if the field recurrence_group is filled and if the recurrence_type has been set # if the type has been set then it's part of recurrence and we should have a recurrence_group number if (empty($this->recurrence_group) && $this->recurrence_freq) { $this->recurrence_group = mt_rand(0, 9999); } ## END RECURRENCE ## return parent::store($updateNulls); }
public function display($tpl = null) { if ($this->getLayout() == 'choosevenue') { $this->_displaychoosevenue($tpl); return; } if ($this->getLayout() == 'choosecontact') { $this->_displaychoosecontact($tpl); return; } // Initialise variables. $jemsettings = JEMHelper::config(); $app = JFactory::getApplication(); $user = JFactory::getUser(); $valguest = JEMUser::validate_guest(); $document = JFactory::getDocument(); $model = $this->getModel(); $menu = $app->getMenu(); $menuitem = $menu->getActive(); $pathway = $app->getPathway(); $url = JUri::root(); $template = $app->getTemplate(); $settings = JemHelper::globalattribs(); $vsettings = JemHelper::viewSettings('veditevent'); $this->vsettings = $vsettings; $this->settings = $settings; $this->valguest = $valguest; // Get model data. $this->state = $this->get('State'); $this->item = $this->get('Item'); $this->params = $this->state->get('params'); // Create a shortcut for $item and params. $item = $this->item; $params = $this->params; $this->form = $this->get('Form'); $this->return_page = $this->get('ReturnPage'); if ($valguest == false) { // check for guest if (!$user || $user->id == 0) { $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); return false; } } if (empty($this->item->id)) { // Check if the user has access to the form $maintainer = JemUser::ismaintainer('add'); $genaccess = JemUser::validate_user($jemsettings->evdelrec, $jemsettings->delivereventsyes); if ($maintainer || $genaccess) { $dellink = true; } else { $dellink = false; } $valguest = JEMUser::validate_guest(); $authorised = $user->authorise('core.create', 'com_jem') || (count($user->getAuthorisedCategories('com_jem', 'core.create')) || $valguest || $dellink); } else { // Check if user can edit $maintainer5 = JemUser::ismaintainer('edit', $this->item->id); $genaccess5 = JemUser::editaccess($jemsettings->eventowner, $this->item->created_by, $jemsettings->eventeditrec, $jemsettings->eventedit); if ($maintainer5 || $genaccess5) { $allowedtoeditevent = true; } else { $allowedtoeditevent = false; } $authorised = $this->item->params->get('access-edit') || $allowedtoeditevent; } if ($authorised !== true) { $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); return false; } // Decide which parameters should take priority $useMenuItemParams = $menuitem && $menuitem->query['option'] == 'com_jem' && $menuitem->query['view'] == 'editevent' && 0 == $item->id; // menu item is always for new event $title = $item->id == 0 ? JText::_('COM_JEM_EDITEVENT_ADD_EVENT') : JText::sprintf('COM_JEM_EDITEVENT_EDIT_EVENT', $item->title); if ($useMenuItemParams) { $pagetitle = $menuitem->title ? $menuitem->title : $title; $params->def('page_title', $pagetitle); $params->def('page_heading', $pagetitle); $pathway->setItemName(1, $pagetitle); // Load layout from menu item if one is set else from event if there is one set if (isset($menuitem->query['layout'])) { $this->setLayout($menuitem->query['layout']); } elseif ($layout = $item->params->get('event_layout')) { $this->setLayout($layout); } $item->params->merge($params); } else { $pagetitle = $title; $params->set('page_title', $pagetitle); $params->set('page_heading', $pagetitle); $params->set('show_page_heading', 1); // ensure page heading is shown $params->set('introtext', ''); // there is definitely no introtext. $params->set('show_introtext', 0); $pathway->addItem($pagetitle, ''); // link not required here so '' is ok // Check for alternative layouts (since we are not in a edit-event menu item) // Load layout from event if one is set if ($layout = $item->params->get('event_layout')) { $this->setLayout($layout); } $temp = clone $params; $temp->merge($item->params); $item->params = $temp; } if (!empty($this->item) && isset($this->item->id)) { // $this->item->images = json_decode($this->item->images); // $this->item->urls = json_decode($this->item->urls); $tmp = new stdClass(); // check for recurrence if ($this->item->recurrence_type != 0 || $this->item->recurrence_first_id != 0) { $tmp->recurrence_type = 0; $tmp->recurrence_first_id = 0; } // $tmp->images = $this->item->images; // $tmp->urls = $this->item->urls; $this->form->bind($tmp); } // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); return false; } $access2 = JEMHelper::getAccesslevelOptions(); $this->access = $access2; // add css file JemHelper::loadCss('jem'); JemHelper::loadCustomCss(); # Load scripts JHtml::_('bootstrap.framework'); if ($vsettings->get('editevent_show_attachmentstab', 1)) { JHtml::_('script', 'com_jem/attachments.js', false, true); } if ($vsettings->get('editevent_show_othertab', 1)) { JHtml::_('script', 'com_jem/other.js', false, true); JHtml::_('script', 'com_jem/recurrence.js', false, true); } JHtml::_('script', 'com_jem/seo.js', false, true); if (JEMUser::validate_guest()) { JHtml::_('script', 'com_jem/antispam.js', false, true); } JHtml::_('behavior.tabstate'); // Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($item->params->get('pageclass_sfx')); $this->dimage = JemImage::flyercreator($this->item->datimage, 'event'); $this->jemsettings = $jemsettings; $this->infoimage = JHtml::_('image', 'com_jem/icon-16-hint.png', JText::_('COM_JEM_NOTES'), NULL, true); $this->user = $user; if ($params->get('enable_category') == 1) { $this->form->setFieldAttribute('catid', 'default', $params->get('catid', 1)); $this->form->setFieldAttribute('catid', 'readonly', 'true'); } $this->_prepareDocument(); parent::display($tpl); }