Example #1
0
 /**
  * Save group
  */
 function save()
 {
     // Check for request forgeries
     JRequest::checkToken() or die('Invalid Token');
     $db =& JFactory::getDBO();
     $row =& JTable::getInstance('Group', 'FabrikTable');
     $post = JRequest::get('post');
     if (!$row->bind($post)) {
         return JError::raiseWarning(500, $row->getError());
     }
     // 	save params
     $params = new fabrikParams($row->attribs, JPATH_COMPONENT . DS . 'xml' . DS . 'group.xml');
     $row->attribs = $params->updateAttribsFromParams(JRequest::getVar('params', array(), 'post', 'array'));
     if (!$row->store()) {
         return JError::raiseWarning(500, $row->getError());
     }
     $row->checkin();
     $task = JRequest::getCmd('task');
     //update the group's element table definitons, currently used for database join element
     //which if part of a repeat group should revert to varchar(255) regardless of what table
     //field it joins to
     $groupModel =& JModel::getInstance('Group', 'FabrikModel');
     $groupModel->setId($row->id);
     $elements =& $groupModel->getMyElements();
     $c = 0;
     foreach ($elements as $element) {
         if ($c === 0) {
             $tableModel =& $element->getTableModel();
             // $$$ hugh - this was screwing up if it's a joined group, tried to modify
             // columns on main form's table instead of joined table!
             // So if it's a joined group, need to get table name from join model
             if ($groupModel->isJoin()) {
                 $joinModel =& $groupModel->getJoinModel();
                 $joinTable =& $joinModel->getJoin();
                 $tableName = $joinTable->table_join;
             } else {
                 $table =& $tableModel->getTable();
                 $tableName = $table->db_table_name;
             }
             // $$$ hugh - at the moment, connection details will be same even it's a join, as
             // we don't do cross database joins.  But at some point may need to modify this
             // this bit as well to get connection from join.
             $fabrikDb =& $tableModel->getDb();
         }
         $elementName = $element->getElement()->name;
         $objtype = $element->getFieldDescription();
         // $$$ hugh - changed this to use $tableName derived above instead of $table->db_table_name
         $query = "ALTER TABLE " . FabrikString::safeColName($tableName) . " CHANGE " . $fabrikDb->nameQuote($elementName) . " " . $fabrikDb->nameQuote($elementName) . " {$objtype}";
         $fabrikDb->setQuery($query);
         $fabrikDb->query();
         $c++;
     }
     switch ($task) {
         case 'apply':
             $link = 'index.php?option=com_fabrik&c=group&task=edit&cid[]=' . $row->id;
             break;
         case 'save':
         default:
             $link = 'index.php?option=com_fabrik&c=group';
             break;
     }
     $cache =& JFactory::getCache('com_fabrik');
     $cache->clean();
     $this->setRedirect($link, JText::_('GROUP SAVED'));
 }
Example #2
0
 /**
  * Save package
  */
 function save()
 {
     // Check for request forgeries
     JRequest::checkToken() or die('Invalid Token');
     jimport('joomla.utilities.date');
     $now = new JDate();
     $now = $now->toUnix();
     $db =& JFactory::getDBO();
     $user =& JFactory::getUser();
     $row =& JTable::getInstance('package', 'Table');
     $post = JRequest::get('post');
     if (!$row->bind($post)) {
         return JError::raiseWarning(500, $row->getError());
     }
     // save params
     $params = new fabrikParams($row->attribs, JPATH_COMPONENT . DS . 'xml' . DS . 'package.xml');
     $row->attribs = $params->updateAttribsFromParams(JRequest::getVar('params', array(), 'post', 'array'));
     $row->tables = implode(",", JRequest::getVar('tables', array(), 'post'));
     if ($row->id == 0) {
         $row->created = $now;
     } else {
         $row->modified = $now;
         $row->modified_by = $user->get('id');
     }
     if (!$row->store()) {
         return JError::raiseWarning(500, $row->getError());
     }
     $row->checkin();
     $task = JRequest::getCmd('task');
     $msg = JText::_('PACKAGE SAVED');
     switch ($task) {
         case 'apply':
             $link = 'index.php?option=com_fabrik&c=package&task=edit&cid[]=' . $row->id;
             break;
         case 'save':
         default:
             $link = 'index.php?option=com_fabrik&c=package';
             break;
     }
     $this->setRedirect($link, $msg);
 }
Example #3
0
 protected function updateMetaSettings($model, $tmpldata = array())
 {
     $db =& JFactory::getDBO();
     if ($model === false) {
         $db->setQuery("select id from #__fabrik_tables where db_table_name = " . $db->Quote($this->tbl));
         $tid = $db->loadResult();
         $model = JModel::getInstance('table', 'FabrikModel');
         $model->setId($tid);
     }
     $elements = $model->getForm()->getFormGroups();
     foreach ($tmpldata as $fullElName => $data) {
         $shortName = array_pop(explode("___", $fullElName));
         $filterType = JArrayHelper::getValue($data, 'filter_type');
         foreach ($elements as $el) {
             if ($el->name == $shortName) {
                 $db->setQuery("update #__elements set filter_type = " . $db->Quote($filterType) . " where id = " . (int) $el->id);
                 $db->Query();
             }
         }
     }
     //set the search type
     $table = $model->getTable();
     $attribs = $table->attribs;
     $params = new fabrikParams($attribs, JPATH_COMPONENT . DS . 'xml' . DS . 'table.xml');
     $aparams = $params->toArray();
     $aparams['search-mode'] = $this->searchMode ? 'OR' : 'AND';
     $params->empty_data_msg = 'No records found';
     $table->attribs = $params->updateAttribsFromParams($aparams);
     $table->store();
 }
Example #4
0
 /**
  * Save cron
  */
 function save()
 {
     // Check for request forgeries
     JRequest::checkToken() or die('Invalid Token');
     jimport('joomla.utilities.date');
     $user =& JFactory::getUser();
     $db =& JFactory::getDBO();
     $row =& JTable::getInstance('cron', 'Table');
     $post = JRequest::get('post');
     // $$$ hugh - published state is checkbox, so doesn't seem to be in post array if not selected
     if (!isset($post['state'])) {
         $post['state'] = '0';
     }
     if (!$row->bind($post)) {
         return JError::raiseWarning(500, $row->getError());
     }
     $now = new JDate();
     if ($row->id == 0) {
         $row->created = $now->toMySQL();
         $row->created_by = $user->get('id');
         $row->created_by_alias = $user->get('username');
     } else {
         $row->modified = $now->toMySQL();
         $row->modified_by = $user->get('id');
     }
     //set the lastrun date to be that shown in the date selections
     echo JRequest::getVar('lastrun');
     // 	save params
     $params = new fabrikParams($row->attribs, JPATH_COMPONENT . DS . 'xml' . DS . 'cron.xml');
     $row->attribs = $params->updateAttribsFromParams(JRequest::getVar('params', array(), 'post', 'array'));
     $this->crontab_set($row->frequency, $row->unit);
     if (!$row->store()) {
         return JError::raiseWarning(500, $row->getError());
     }
     $row->checkin();
     $task = JRequest::getCmd('task');
     switch ($task) {
         case 'apply':
             $link = 'index.php?option=com_fabrik&c=cron&task=edit&cid[]=' . $row->id;
             break;
         case 'save':
         default:
             $link = 'index.php?option=com_fabrik&c=cron';
             break;
     }
     $this->setRedirect($link, JText::_('CRON SAVED'));
 }
Example #5
0
 /**
  * Save a connection
  */
 function save()
 {
     // Check for request forgeries
     JRequest::checkToken() or die('Invalid Token');
     // clear form from session
     $session =& JFactory::getSession();
     $session->clear('com_fabrik.admin.form.edit.model');
     jimport('joomla.utilities.date');
     $db =& JFactory::getDBO();
     $user =& JFactory::getUser();
     $formModel =& JModel::getInstance('Form', 'FabrikModel');
     $formModel->setId(JRequest::getInt('id'));
     $formModel->getForm();
     $row =& JTable::getInstance('form', 'Table');
     $post = JRequest::get('post');
     if (!$row->bind($post)) {
         return JError::raiseWarning(500, $row->getError());
     }
     list($dofilter, $filter) = FabrikWorker::getContentFilter();
     //$filter	= new JFilterInput(null, null, 1, 1);
     $intro = JRequest::getVar('intro', '', 'post', 'string', JREQUEST_ALLOWRAW);
     $row->intro = $dofilter ? $filter->clean($intro) : $intro;
     $details = JRequest::getVar('details', array(), 'post', 'array');
     $row->bind($details);
     FabrikHelper::prepareSaveDate($row->publish_down);
     FabrikHelper::prepareSaveDate($row->created);
     FabrikHelper::prepareSaveDate($row->publish_up);
     // save params
     $params = new fabrikParams($row->attribs, JPATH_COMPONENT . DS . 'model' . DS . 'form.xml');
     $row->attribs = $params->updateAttribsFromParams(JRequest::getVar('params', array(), 'post', 'array'));
     if ($row->id != 0) {
         $datenow =& JFactory::getDate();
         $row->modified = $datenow->toMySQL();
         $row->modified_by = $user->get('id');
     }
     if (!$row->store()) {
         return JError::raiseWarning(500, $row->getError());
     }
     $row->checkin();
     $formModel->_id = $row->id;
     $formModel->_form =& $row;
     $formModel->saveFormGroups();
     $task = JRequest::getCmd('task');
     switch ($task) {
         case 'apply':
             $link = 'index.php?option=com_fabrik&c=form&task=edit&cid[]=' . $row->id;
             break;
         case 'save':
         default:
             $link = 'index.php?option=com_fabrik&c=form';
             break;
     }
     $cache =& JFactory::getCache('com_fabrik');
     $cache->clean();
     $this->setRedirect($link, JText::_('FORM SAVED'));
     //for prefab
     return $formModel;
 }
Example #6
0
 /**
  * save the table from admin
  *
  * @return Jerror if not saved true if saved ok
  */
 function save()
 {
     $session =& JFactory::getSession();
     $app =& JFactory::getApplication();
     $db =& JFactory::getDBO();
     $user =& JFactory::getUser();
     $config =& JFactory::getConfig();
     $id = JRequest::getInt('id', 0, 'post');
     $this->setId($id);
     $row =& $this->getTable(false, false);
     $formModel =& JModel::getInstance('Form', 'FabrikModel');
     $post = JRequest::get('post');
     if (!$row->bind($post)) {
         return JError::raiseWarning(500, $row->getError());
     }
     list($dofilter, $filter) = FabrikWorker::getContentFilter();
     $introduction = JRequest::getVar('introduction', '', 'post', 'string', JREQUEST_ALLOWRAW);
     $row->introduction = $dofilter ? $filter->clean($introduction) : $introduction;
     $details = JRequest::getVar('details', array(), 'post', 'array');
     $row->bind($details);
     $aOrderBy = JRequest::getVar('order_by', array(), 'post', 'array');
     $row->order_by = implode(GROUPSPLITTER2, $aOrderBy);
     $aOrderDir = JRequest::getVar('order_dir', array(), 'post', 'array');
     $row->order_dir = implode(GROUPSPLITTER2, $aOrderDir);
     if (!$row->check()) {
         $app->setError($row->getError());
         return JError::raiseWarning(500, $row->getError());
     }
     if ($id == 0) {
         $newtable = trim(JRequest::getVar('_database_name', '', 'post'));
         // $$$ hugh - added some more sanity checking on table name, get rid of non-alphanumeric and _
         // @TODO - should prolly use a helper for this, like FabrikString::clean()
         // but need to think about case issues first
         $newtable = preg_replace('#[^0-9a-zA-Z_]#', '_', $newtable);
         //check the entered database table doesnt already exist
         if ($newtable != '' && $this->databaseTableExists($newtable)) {
             return JError::raiseWarning(500, JText::_('DATABASE TABLE ALREADY EXISTS'));
         }
         if (!$this->canCreateDbTable()) {
             return JError::raiseWarning(500, Jtext::_('YOUR_DB_USER_HAS_INSUFFICIENT_RIGHTS_TO_CREATE_TABLE'));
         }
         //create fabrik form
         $formModel =& $this->_createLinkedForm();
         //create fabrik group
         $groupData = array("name" => $row->label, "label" => $row->label);
         JRequest::setVar('_createGroup', 1, 'post');
         if ($newtable != '') {
             $groupId = $this->_createLinkedGroup($groupData, false);
             $row->db_table_name = $newtable;
             $row->db_primary_key = "`" . $newtable . '`.`id`';
             $row->auto_inc = 1;
             $res = $this->createDBTable($formModel, $newtable);
         } else {
             // 2.0.5 balsamiq to fabrik tmpl generator sets up group properties in session, if we find those lets make
             // n groups each with their own groupid
             $groupDatas = array($groupData);
             if ($session->has('com_fabrik.list.create.groupmap')) {
                 $groupDatas =& $session->get('com_fabrik.list.create.groupmap');
             }
             $groupMap = array();
             foreach ($groupDatas as $x => $groupData) {
                 $groupId = $this->_createLinkedGroup($groupData, false);
                 $groupMap[$x] = $groupId;
             }
             //set element group ids
             if ($session->has('com_fabrik.list.create.elementmap')) {
                 $map = (array) $session->get('com_fabrik.list.create.elementmap');
                 foreach ($map as &$m) {
                     $groupMapId = array_key_exists('groupid', $m) ? $m['groupid'] : 0;
                     $m['groupid'] = $groupMap[$groupMapId];
                 }
                 $session->set('com_fabrik.list.create.elementmap', $map);
             }
             // save elements in group
             foreach ($groupMap as $groupId) {
                 $this->_createLinkedElements($groupId, $post);
             }
         }
         //	set the tables form id
         $this->_updateFormId($formModel->_form->id);
     }
     // 	save params - this file no longer exists? do we use models/table.xml instead??
     $params = new fabrikParams($row->attribs, JPATH_COMPONENT . DS . 'xml' . DS . 'table.xml');
     $row->attribs = $params->updateAttribsFromParams(JRequest::getVar('params', array(), 'post', 'array'));
     $row->rows_per_page = JRequest::getInt('rows_per_page', 10, 'post');
     if ($row->id != 0) {
         $datenow =& JFactory::getDate();
         $row->modified = $datenow->toMySQL();
         $row->modified_by = $user->get('id');
     }
     FabrikHelper::prepareSaveDate($row->publish_down);
     FabrikHelper::prepareSaveDate($row->created);
     FabrikHelper::prepareSaveDate($row->publish_up);
     $pk = JRequest::getVar('db_primary_key');
     if ($pk == '') {
         $aKey = $this->getPrimaryKeyAndExtra();
         $aKey = $aKey[0];
         $row->db_primary_key = "`" . $row->db_table_name . "`.`" . $aKey['colname'] . "`";
         $row->auto_inc = stristr($aKey['extra'], 'auto_increment') ? true : false;
     }
     if (!$row->store()) {
         return JError::raiseWarning(500, $row->getError());
     }
     // load in all the tables data - even if it wasnt in the post data
     $table =& $this->getTable();
     //needed if saving a table for first time (otherwise id = 0)
     $this->setId($table->id);
     $this->updateJoins();
     if (!$this->isView()) {
         // this was only run on a new table - but I've put it here so that if you upload a new table you can ensure that its columns are fixed
         $this->makeSafeTableColumns();
         $this->updatePrimaryKey($row->db_primary_key, $row->auto_inc);
     }
     $row->checkin();
     //make an array of elments and a presumed index size
     //map is then used in creating indexes
     $map = array();
     $groups =& $this->getForm()->getGroupsHiarachy();
     foreach ($groups as $groupModel) {
         $elementModels =& $groupModel->getMyElements();
         foreach ($elementModels as $element) {
             //int elements cant have a index size attrib
             // $$$ hugh neither can DATETIME
             $coltype = $element->getFieldDescription();
             if (JString::stristr($coltype, 'int')) {
                 $size = '';
             } else {
                 if (JString::stristr($coltype, 'datetime')) {
                     $size = '';
                 } else {
                     $size = 10;
                     // $$$ hugh - adding index will barf if key size > varchar size.
                     $matches = array();
                     if (preg_match('/varchar\\((\\d+)\\)/i', $coltype, $matches)) {
                         $varchar_size = (int) $matches[1];
                         if ($varchar_size < 10) {
                             $size = $varchar_size;
                         }
                     }
                 }
             }
             $map[$element->getFullName(false, false, false)] = $size;
             $map[$element->getElement()->id] = $size;
         }
     }
     //update indexes (added array_key_exists check as these may be during after CSV import)
     if (!empty($aOrderBy) && array_key_exists($row->order_by, $map)) {
         foreach ($aOrderBy as $orderBy) {
             if (array_key_exists($orderBy, $map)) {
                 $this->addIndex($orderBy, 'tableorder', 'INDEX', $map[$orderBy]);
             }
         }
     }
     if ($row->group_by !== '' && array_key_exists($row->group_by, $map)) {
         $this->addIndex($row->group_by, 'groupby', 'INDEX', $map["{$row->group_by}"]);
     }
     if ($params->get('group_by_order') !== '') {
         $this->addIndex($params->get('group_by_order'), 'groupbyorder', 'INDEX', $map[$params->get('group_by_order')]);
     }
     $afilterFields = $params->get('filter-fields', '', '_default', 'array');
     foreach ($afilterFields as $field) {
         $field = str_replace('`', '', $field);
         $this->addIndex($field, 'prefilter', 'INDEX', $map[$field]);
     }
     if (JFolder::exists(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_joomfish' . DS . 'contentelements')) {
         if ($params->get('allow-data-translation')) {
             if (!$this->makeJoomfishXML()) {
                 JError::raiseNotice('E_ERROR', JTEXT::_("Unable to make Joomfish XML file"));
             }
         } else {
             $this->removeJoomfishXML();
         }
     }
     return true;
 }