Example #1
0
 /**
  * Construct
  *
  * @param   array $config options
  */
 public function __construct($config = array())
 {
     $this->fundleMenus();
     if (!$this->shouldUpgrade()) {
         return parent::__construct($config);
     }
     $this->upgrade();
     return parent::__construct($config);
 }
Example #2
0
 /**
  * Constructor.
  *
  * @param   array $config An optional associative array of configuration settings.
  *
  * @throws UnexpectedValueException
  */
 public function __construct($config = array())
 {
     parent::__construct($config);
     $listModel = ArrayHelper::getValue($config, 'listModel', JModelLegacy::getInstance('List', 'FabrikAdminModel'));
     if (!is_a($listModel, 'FabrikAdminModelList')) {
         throw new UnexpectedValueException('Content Type Constructor requires an Admin List Model');
     }
     $this->listModel = $listModel;
     $this->doc = new DOMDocument();
 }
Example #3
0
 /**
  * Construct
  *
  * @param   array  $config  options
  */
 public function __construct($config = array())
 {
     $this->fundleMenus();
     if (!$this->shouldUpgrade()) {
         JFactory::getApplication()->enqueueMessage('Already updated');
         return parent::__construct($config);
     }
     if ($this->backUp()) {
         $this->upgrade();
     }
     JFactory::getApplication()->enqueueMessage('Upgraded OK!');
     return parent::__construct($config);
 }
Example #4
0
 /**
  * Save the package
  *
  * @param   array  $data  jform data
  *
  * @return  bool
  */
 public function save($data)
 {
     $canvas = $data['params']['canvas'];
     $o = new stdClass();
     $o->blocks = new stdClass();
     $o->blocks->list = array();
     $o->blocks->form = array();
     $app = JFactory::getApplication();
     $input = $app->input;
     $blocks = $input->get('blocks', array(), 'array');
     foreach ($blocks as $type => $values) {
         $o->blocks->{$type} = $values;
     }
     foreach ($blocks as $type => $values) {
         $tbl = JString::ucfirst($type);
         foreach ($values as $id) {
             $item = $this->getTable($tbl);
             $item->load($id);
             if ($type == 'list') {
                 // Also assign the form to the package
                 $form = $this->getTable('Form');
                 $form->load($item->form_id);
                 if (!in_array($form->id, $o->blocks->form)) {
                     $o->blocks->form[] = $form->id;
                 }
             }
         }
     }
     // Resave the data to update blocks
     $data['params']['canvas'] = $o;
     $data['params'] = json_encode($data['params']);
     $return = parent::save($data);
     return $return;
 }
Example #5
0
 /**
  * Save the pacakge
  *
  * @param   array  $data  jform data
  *
  * @return  bool
  */
 public function save($data)
 {
     $canvas = $data['params']['canvas'];
     $canvas = json_decode($canvas);
     $o = new stdClass();
     if (is_null($canvas)) {
         JError::raiseError(E_ERROR, 'malformed json package object');
     }
     $o->canvas = $canvas;
     $data['params'] = json_encode($o);
     $return = parent::save($data);
     $data['id'] = $this->getState($this->getName() . '.id');
     $packageId = $this->getState($this->getName() . '.id');
     $blocks = is_object($o->canvas) ? $o->canvas->blocks : array();
     foreach ($blocks as $fullkey => $ids) {
         $key = FabrikString::rtrimword($fullkey, 's');
         $tbl = JString::ucfirst($key);
         foreach ($ids as $id) {
             $item = $this->getTable($tbl);
             $item->load($id);
             if ($key == 'list') {
                 // Also assign the form to the package
                 $form = $this->getTable('Form');
                 $form->load($item->form_id);
                 if (!in_array($form->id, $blocks->form)) {
                     $o->canvas->blocks->form[] = $item->id;
                 }
             }
         }
     }
     // Resave the data to update blocks
     $data['params'] = json_encode($o);
     $return = parent::save($data);
     return $return;
 }
Example #6
0
/**
 *  delete form and form groups
 * @param array $cids to delete
 */

public function delete($cids)
{
	$res = parent::delete($cids);
	if ($res) {
		foreach ($cids as $cid) {
			$item = FabTable::getInstance('FormGroup', 'FabrikTable');
			$item->load(array('form_id'=> $cid));
			$item->delete();
		}
	}
	return $res;
}
Example #7
0
 /**
  * Method to validate the form data.
  *
  * @param   JForm  $form  The form to validate against.
  * @param   array  $data  The data to validate.
  * @param   string $group The name of the field group to validate.
  *
  * @see     JFormRule
  * @see     JFilterInput
  *
  * @return  mixed  Array of filtered data if valid, false otherwise.
  */
 public function validate($form, $data, $group = null)
 {
     $params = $data['params'];
     $ok = parent::validate($form, $data);
     // Standard jform validation failed so we shouldn't test further as we can't be sure of the data
     if (!$ok) {
         return false;
     }
     // Hack - must be able to add the plugin xml fields file to $form to include in validation but cant see how at the moment
     $data['params'] = $params;
     return $data;
 }
Example #8
0
 /**
  * Potentially drop fields then remove element record
  * Will also do the same for child elements
  *
  * @param   array &$pks To delete
  *
  * @return  boolean  True if successful, false if an error occurs.
  */
 public function delete(&$pks)
 {
     // Initialize variables
     $elementIds = $this->app->input->get('elementIds', array(), 'array');
     foreach ($elementIds as $id) {
         if ((int) $id === 0) {
             continue;
         }
         $pluginModel = $this->pluginManager->getElementPlugin($id);
         $pluginModel->onRemove();
         $children = $pluginModel->getElementDescendents($id);
         foreach ($children as $childId) {
             $childModel = $this->pluginManager->getElementPlugin($childId);
             $childModel->onRemove();
         }
         // Enables the deletion of child elements
         $pks = array_merge($pks, $children);
         $element = $pluginModel->getElement();
         if ($pluginModel->isRepeatElement()) {
             $listModel = $pluginModel->getListModel();
             $db = $listModel->getDb();
             $tableName = $db->qn($this->getRepeatElementTableName($pluginModel));
             $db->setQuery('DROP TABLE ' . $tableName);
             $db->execute();
         }
         $listModel = $pluginModel->getListModel();
         $item = $listModel->getTable();
         // $$$ hugh - might be a table-less form!
         if (!empty($item->id)) {
             $db = $listModel->getDb();
             $db->setQuery('ALTER TABLE ' . $db->qn($item->db_table_name) . ' DROP ' . $db->qn($element->name));
             $db->execute();
         }
     }
     return parent::delete($pks);
 }
Example #9
0
 /**
  * Save the form
  *
  * @param   array  $data  the jform part of the request data
  *
  * @return  bool
  */
 public function save($data)
 {
     $this->populateState();
     $app = JFactory::getApplication();
     $input = $app->input;
     $user = JFactory::getUser();
     $config = JFactory::getConfig();
     $date = JFactory::getDate();
     $row = $this->getTable();
     $id = JArrayHelper::getValue($data, 'id');
     $row->load($id);
     $params = new JRegistry($row->params);
     $this->setState('list.id', $id);
     $this->setState('list.form_id', $row->form_id);
     $feModel = $this->getFEModel();
     $formModel = $this->getFormModel();
     // Get original collation
     $db = $feModel->getDb();
     if (!empty($data['db_table_name'])) {
         $db->setQuery('SHOW TABLE STATUS LIKE ' . $db->quote($data['db_table_name']));
         $info = $db->loadObject();
         $origCollation = is_object($info) ? $info->Collation : $params->get('collation', 'none');
     } else {
         $origCollation = $params->get('collation', 'none');
     }
     $row->bind($data);
     $row->order_by = json_encode($input->get('order_by', array(), 'array'));
     $row->order_dir = json_encode($input->get('order_dir', array(), 'array'));
     $row->check();
     $this->collation($feModel, $origCollation, $row);
     $isNew = true;
     if ($row->id != 0) {
         $datenow = JFactory::getDate();
         $row->modified = $datenow->toSql();
         $row->modified_by = $user->get('id');
     }
     if ($id == 0) {
         if ($row->created == '') {
             $row->created = $date->toSql();
         }
         // Save the row now
         $row->store();
         $isNew = false;
         $newtable = trim(JArrayHelper::getValue($data, '_database_name'));
         // Mysql will force db table names to lower case even if you set the db name to upper case - so use clean()
         $newtable = FabrikString::clean($newtable);
         // Check the entered database table doesnt already exist
         if ($newtable != '' && $this->databaseTableExists($newtable)) {
             throw new RuntimeException(JText::_('COM_FABRIK_DATABASE_TABLE_ALREADY_EXISTS'));
             return false;
         }
         if (!$this->canCreateDbTable()) {
             throw new RuntimeException(Jtext::_('COM_FABRIK_INSUFFICIENT_RIGHTS_TO_CREATE_TABLE'));
             return false;
         }
         // Create fabrik form
         $formModel = $this->createLinkedForm();
         $row->form_id = $this->getState('list.form_id');
         // Create fabrik group
         $groupData = FabrikWorker::formDefaults('group');
         $groupData['name'] = $row->label;
         $groupData['label'] = $row->label;
         $input->set('_createGroup', 1, 'post');
         $groupId = $this->createLinkedGroup($groupData, false);
         if ($newtable == '') {
             // New fabrik list but existing db table
             $this->createLinkedElements($groupId);
         } else {
             $row->db_table_name = $newtable;
             $row->auto_inc = 1;
             $dbOpts = array();
             $params = new JRegistry($row->params);
             $dbOpts['COLLATE'] = $params->get('collation', '');
             $res = $this->createDBTable($newtable, $input->get('defaultfields', array('id' => 'internalid', 'date_time' => 'date'), 'array'), $dbOpts);
             if (is_array($res)) {
                 $row->db_primary_key = $newtable . '.' . $res[0];
             }
         }
     }
     $params = new JRegistry($row->params);
     $params->set('isview', $feModel->isView());
     $row->params = (string) $params;
     FabrikAdminHelper::prepareSaveDate($row->publish_down);
     FabrikAdminHelper::prepareSaveDate($row->created);
     FabrikAdminHelper::prepareSaveDate($row->publish_up);
     $pk = JArrayHelper::getValue($data, 'db_primary_key');
     if ($pk == '') {
         $pk = $feModel->getPrimaryKeyAndExtra($row->db_table_name);
         $key = $pk[0]['colname'];
         $extra = $pk[0]['extra'];
         // Store without quoteNames as thats db specific
         $row->db_primary_key = $row->db_primary_key == '' ? $row->db_table_name . "." . $key : $row->db_primary_key;
         $row->auto_inc = JString::stristr($extra, 'auto_increment') ? true : false;
     }
     $row->store();
     $pk = $row->db_primary_key;
     $this->updateJoins($data);
     // Needed to ensure pk field is not quoted
     $feModel->setTable($row);
     if (!$feModel->isView()) {
         $this->updatePrimaryKey($row->db_primary_key, $row->auto_inc);
     }
     // Make an array of elments and a presumed index size, map is then used in creating indexes
     $map = array();
     $groups = $this->getFormModel()->getGroupsHiarachy();
     foreach ($groups as $groupModel) {
         $elementModels = $groupModel->getMyElements();
         foreach ($elementModels as $element) {
             // Int and DATETIME elements cant have a index size attrib
             $coltype = $element->getFieldDescription();
             if (JString::stristr($coltype, 'int')) {
                 $size = '';
             } elseif (JString::stristr($coltype, 'datetime')) {
                 $size = '';
             } else {
                 $size = '10';
             }
             $map[$element->getFullName(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)) {
                 $feModel->addIndex($orderBy, 'tableorder', 'INDEX', $map[$orderBy]);
             }
         }
     }
     if ($row->group_by !== '' && array_key_exists($row->group_by, $map)) {
         $feModel->addIndex($row->group_by, 'groupby', 'INDEX', $map["{$row->group_by}"]);
     }
     if (trim($params->get('group_by_order')) !== '') {
         $feModel->addIndex($params->get('group_by_order'), 'groupbyorder', 'INDEX', $map[$params->get('group_by_order')]);
     }
     $afilterFields = (array) $params->get('filter-fields', array());
     foreach ($afilterFields as $field) {
         if (array_key_exists($field, $map)) {
             $feModel->addIndex($field, 'prefilter', 'INDEX', $map[$field]);
         }
     }
     $pkName = $row->getKeyName();
     if (isset($row->{$pkName})) {
         $this->setState($this->getName() . '.id', $row->{$pkName});
     }
     /**
      * $$$ hugh - I don't know what this state gets used for, but $iNew is
      * currently ending up the wrong way round.  New tables it's false,
      * existing tables it's true.
      */
     $this->setState($this->getName() . '.new', $isNew);
     parent::cleanCache('com_fabrik');
     return true;
 }
Example #10
0
 public function validate($form, $data)
 {
     $params = $data['params'];
     $data = parent::validate($form, $data);
     if (!$data) {
         return false;
     }
     if (empty($data['_database_name']) && JArrayHelper::getValue($data, 'db_table_name') == '') {
         $this->setError(JText::_('COM_FABRIK_SELECT_DB_OR_ENTER_NAME'));
         return false;
     }
     //hack - must be able to add the plugin xml fields file to $form to include in validation
     // but cant see how at the moment
     $data['params'] = $params;
     return $data;
 }
Example #11
0
	public function delete(&$pks)
	{
		if (empty($pks)) {
			return true;
		}
		if (parent::delete($pks)) {
			if ($this->deleteFormGroups($pks)) {
				return $this->deleteElements($pks);
			}
		}
		return false;
	}
Example #12
0
 /**
  * Save the form
  *
  * @param   array  $data  the jform part of the request data
  *
  * @return  bool
  */
 public function save($data)
 {
     $this->populateState();
     $app = JFactory::getApplication();
     $user = JFactory::getUser();
     $config = JFactory::getConfig();
     $date = JFactory::getDate();
     $row = $this->getTable();
     $id = $data['id'];
     $row->load($id);
     $this->setState('list.id', $id);
     $this->setState('list.form_id', $row->form_id);
     $feModel = $this->getFEModel();
     $formModel = $this->getFormModel();
     if (!$row->bind($data)) {
         $this->setError($row->getError());
         return false;
     }
     $filter = new JFilterInput(null, null, 1, 1);
     $introduction = JArrayHelper::getValue(JRequest::getVar('jform', array(), 'post', 'array', JREQUEST_ALLOWRAW), 'introduction');
     $row->introduction = $filter->clean($introduction);
     $row->order_by = json_encode(JRequest::getVar('order_by', array(), 'post', 'array'));
     $row->order_dir = json_encode(JRequest::getVar('order_dir', array(), 'post', 'array'));
     if (!$row->check()) {
         $this->setError($row->getError());
         return false;
     }
     $isNew = true;
     if ($id == 0) {
         if ($row->created == '') {
             $row->created = $date->toSql();
         }
         // Save the row now
         $row->store();
         $isNew = false;
         $newtable = trim(JArrayHelper::getValue($data, '_database_name'));
         // Mysql will force db table names to lower case even if you set the db name to upper case - so use clean()
         $newtable = FabrikString::clean($newtable);
         // Check the entered database table doesnt already exist
         if ($newtable != '' && $this->databaseTableExists($newtable)) {
             $this->setError(JText::_('COM_FABRIK_DATABASE_TABLE_ALREADY_EXISTS'));
             return false;
         }
         if (!$this->canCreateDbTable()) {
             $this->setError(Jtext::_('COM_FABRIK_INSUFFICIENT_RIGHTS_TO_CREATE_TABLE'));
             return false;
         }
         // Create fabrik form
         $formModel = $this->createLinkedForm();
         $row->form_id = $this->getState('list.form_id');
         // Create fabrik group
         $groupData = FabrikWorker::formDefaults('group');
         $groupData['name'] = $row->label;
         $groupData['label'] = $row->label;
         JRequest::setVar('_createGroup', 1, 'post');
         $groupId = $this->createLinkedGroup($groupData, false);
         if ($newtable == '') {
             // New fabrik list but existing db table
             $this->createLinkedElements($groupId);
         } else {
             $row->db_table_name = $newtable;
             $row->auto_inc = 1;
             $res = $this->createDBTable($newtable, JRequest::getVar('defaultfields', array('id' => 'internalid', 'date_time' => 'date')));
             if (is_array($res)) {
                 $row->db_primary_key = $newtable . '.' . $res[0];
             }
         }
     }
     $params = new JRegistry($row->params);
     if ($row->id != 0) {
         $datenow = JFactory::getDate();
         $row->modified = $datenow->toSql();
         $row->modified_by = $user->get('id');
     }
     FabrikAdminHelper::prepareSaveDate($row->publish_down);
     FabrikAdminHelper::prepareSaveDate($row->created);
     FabrikAdminHelper::prepareSaveDate($row->publish_up);
     $pk = JArrayHelper::getValue($data, 'db_primary_key');
     if ($pk == '') {
         $fields = $row->getFields();
         $key = $row->getKeyName();
         // Store without quoteNames as thats db specific
         $row->db_primary_key = $row->db_primary_key == '' ? $row->db_table_name . "." . $key : $row->db_primary_key;
         $row->auto_inc = JString::stristr($fields[$key]->Extra, 'auto_increment') ? true : false;
     }
     if (!$row->store()) {
         $this->setError($row->getError());
         return false;
     }
     $pk = $row->db_primary_key;
     $this->updateJoins($data);
     // Needed to ensure pk field is not quoted
     $feModel->setTable($row);
     if (!$feModel->isView()) {
         $this->updatePrimaryKey($row->db_primary_key, $row->auto_inc);
     }
     // Make an array of elments and a presumed index size, map is then used in creating indexes
     $map = array();
     $groups = $this->getFormModel()->getGroupsHiarachy();
     foreach ($groups as $groupModel) {
         $elementModels = $groupModel->getMyElements();
         foreach ($elementModels as $element) {
             // Int and DATETIME elements cant have a index size attrib
             $coltype = $element->getFieldDescription();
             if (JString::stristr($coltype, 'int')) {
                 $size = '';
             } elseif (JString::stristr($coltype, 'datetime')) {
                 $size = '';
             } else {
                 $size = '10';
             }
             $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)) {
                 $feModel->addIndex($orderBy, 'tableorder', 'INDEX', $map[$orderBy]);
             }
         }
     }
     if ($row->group_by !== '' && array_key_exists($row->group_by, $map)) {
         $feModel->addIndex($row->group_by, 'groupby', 'INDEX', $map["{$row->group_by}"]);
     }
     if (trim($params->get('group_by_order')) !== '') {
         $feModel->addIndex($params->get('group_by_order'), 'groupbyorder', 'INDEX', $map[$params->get('group_by_order')]);
     }
     $afilterFields = (array) $params->get('filter-fields', array());
     foreach ($afilterFields as $field) {
         if (array_key_exists($field, $map)) {
             $feModel->addIndex($field, 'prefilter', 'INDEX', $map[$field]);
         }
     }
     $this->updateElements($row);
     /* $$$rob - joomfish not available for j1.7
     		 if (JFolder::exists(JPATH_ADMINISTRATOR . '/components/com_joomfish/contentelements')) {
     		if ($params->get('allow-data-translation')) {
     		if (!$this->makeJoomfishXML()) {
     		$this->setError(JTEXT::_( "Unable to make Joomfish XML file"));
     		return false;
     		}
     		} else {
     		$this->removeJoomfishXML();
     		}
     		} */
     $pkName = $row->getKeyName();
     if (isset($row->{$pkName})) {
         $this->setState($this->getName() . '.id', $row->{$pkName});
     }
     $this->setState($this->getName() . '.new', $isNew);
     parent::cleanCache('com_fabrik');
     return true;
 }
Example #13
0
 /**
  * Method to save the form data.
  *
  * @param   array  $data  The form data.
  *
  * @return  boolean  True on success, False on error.
  */
 public function save($data)
 {
     parent::cleanCache('com_fabrik');
     return parent::save($data);
 }
Example #14
0
 /**
  * Returns a reference to the a Table object, always creating it.
  *
  * @param   string $type   The table type to instantiate
  * @param   string $prefix A prefix for the table class name. Optional.
  * @param   array  $config Configuration array for model. Optional.
  *
  * @return  JTable    A database object
  */
 public function getTable($type = 'Cron', $prefix = 'FabrikTable', $config = array())
 {
     $config['dbo'] = FabrikWorker::getDbo(true);
     return parent::getTable($type, $prefix, $config);
 }
Example #15
0
 /**
  * Method to validate the form data.
  *
  * @param   JForm   $form   The form to validate against.
  * @param   array   $data   The data to validate.
  * @param   string  $group  The name of the field group to validate.
  *
  * @see     JFormRule
  * @see     JFilterInput
  *
  * @return  mixed  Array of filtered data if valid, false otherwise.
  */
 public function validate($form, $data, $group = null)
 {
     if ($data['password'] !== $data['passwordConf']) {
         $this->setError(FText::_('COM_FABRIK_PASSWORD_MISMATCH'));
         return false;
     }
     return parent::validate($form, $data);
 }
Example #16
0
 /**
  * Save the form
  *
  * @param   array $data the jForm part of the request data
  *
  * @return  bool
  */
 public function save($data)
 {
     $this->populateState();
     $input = $this->app->input;
     $jForm = $input->get('jform', array(), 'array');
     $date = JFactory::getDate();
     $row = $this->getTable();
     $id = FArrayHelper::getValue($data, 'id');
     $row->load($id);
     $params = new Registry($row->get('params'));
     $isView = $this->setIsView($params);
     $data['params']['isView'] = (string) $isView;
     $this->setState('list.id', $id);
     $this->setState('list.form_id', $row->get('form_id'));
     $feModel = $this->getFEModel();
     /** @var $contentTypeModel FabrikAdminModelContentTypeImport */
     $contentTypeModel = JModelLegacy::getInstance('ContentTypeImport', 'FabrikAdminModel', array('listModel' => $this));
     $contentType = ArrayHelper::getValue($jForm, 'contenttype', '');
     if ($contentType !== '') {
         $contentTypeModel->check($contentType);
     }
     // Get original collation
     $db = $feModel->getDb();
     $origCollation = $this->getOriginalCollation($params, $db, FArrayHelper::getValue($data, 'db_table_name', ''));
     $row->bind($data);
     $row->set('order_by', json_encode($input->get('order_by', array(), 'array')));
     $row->set('order_dir', json_encode($input->get('order_dir', array(), 'array')));
     $row->check();
     $isNew = true;
     if ($row->id != 0) {
         $this->collation($feModel, $origCollation, $row);
         $dateNow = JFactory::getDate();
         $row->set('modified', $dateNow->toSql());
         $row->set('modified_by', $this->user->get('id'));
     }
     if ($id == 0) {
         if ($row->get('created', '') == '') {
             $row->set('created', $date->toSql());
         }
         $isNew = false;
         $existingTable = ArrayHelper::getValue($data, 'db_table_name', '');
         $newTable = $existingTable === '' ? trim(FArrayHelper::getValue($data, '_database_name')) : '';
         // Mysql will force db table names to lower case even if you set the db name to upper case - so use clean()
         $newTable = FabrikString::clean($newTable);
         // Check the entered database table doesn't already exist
         if ($newTable != '' && $this->databaseTableExists($newTable)) {
             throw new RuntimeException(FText::_('COM_FABRIK_DATABASE_TABLE_ALREADY_EXISTS'));
         }
         if (!$this->canCreateDbTable()) {
             throw new RuntimeException(FText::_('COM_FABRIK_INSUFFICIENT_RIGHTS_TO_CREATE_TABLE'));
         }
         // Save the row now
         $row->store();
         // Create fabrik form
         $this->createLinkedForm();
         $row->set('form_id', $this->getState('list.form_id'));
         $groupData = FabrikWorker::formDefaults('group');
         $groupData['name'] = $row->label;
         $groupData['label'] = $row->label;
         if ($newTable == '') {
             // Create fabrik group
             $input->set('_createGroup', 1);
             $groupId = $this->createLinkedGroup($groupData, false);
             // New fabrik list but existing db table
             $this->createLinkedElements($groupId);
         } else {
             $row->set('db_table_name', $newTable);
             $row->set('auto_inc', 1);
             $dbOpts = array();
             $params = new Registry($row->get('params'));
             $dbOpts['COLLATE'] = $params->get('collation', '');
             $fields = $contentTypeModel->import($contentType, $row->get('db_table_name'), $groupData);
             $res = $this->createDBTable($newTable, $fields, $dbOpts);
             if (is_array($res)) {
                 $row->set('db_primary_key', $newTable . '.' . $res[0]);
             }
         }
     }
     $row->set('publish_down', FabrikAdminHelper::prepareSaveDate($row->get('publish_down')));
     $row->set('created', FabrikAdminHelper::prepareSaveDate($row->get('created')));
     $row->set('publish_up', FabrikAdminHelper::prepareSaveDate($row->get('publish_up')));
     $pk = FArrayHelper::getValue($data, 'db_primary_key');
     if ($pk == '') {
         $pk = $feModel->getPrimaryKeyAndExtra($row->get('db_table_name'));
         $key = $pk[0]['colname'];
         $extra = $pk[0]['extra'];
         // Store without qns as that's db specific
         $row->set('db_primary_key', $row->get('db_primary_key', '') == '' ? $row->get('db_table_name') . '.' . $key : $row->get('db_primary_key'));
         $row->set('auto_inc', JString::stristr($extra, 'auto_increment') ? true : false);
     }
     $row->store();
     $this->updateJoins($data);
     // Needed to ensure pk field is not quoted
     $feModel->setTable($row);
     if (!$feModel->isView()) {
         $this->updatePrimaryKey($row->get('db_primary_key'), $row->get('auto_inc'));
     }
     // Make an array of elements and a presumed index size, map is then used in creating indexes
     $this->createIndexes($params, $row);
     $pkName = $row->getKeyName();
     if (isset($row->{$pkName})) {
         $this->setState($this->getName() . '.id', $row->get($pkName));
     }
     /**
      * $$$ hugh - I don't know what this state gets used for, but $iNew is
      * currently ending up the wrong way round.  New tables it's false,
      * existing tables it's true.
      */
     $this->setState($this->getName() . '.new', $isNew);
     parent::cleanCache('com_fabrik');
     if ($id == 0) {
         $contentTypeModel->finalise($row);
     }
     return true;
 }
Example #17
0
 /**
  * Potentially drop fields then remove element record
  *
  * @param   array  &$pks  To delete
  *
  * @return  boolean  True if successful, false if an error occurs.
  */
 public function delete(&$pks)
 {
     // Initialize variables
     $app = JFactory::getApplication();
     $input = $app->input;
     $pluginManager = JModelLegacy::getInstance('Pluginmanager', 'FabrikFEModel');
     $elementIds = $app->input->get('elementIds', array(), 'array');
     foreach ($elementIds as $id) {
         if ((int) $id === 0) {
             continue;
         }
         $pluginModel = $pluginManager->getElementPlugin($id);
         $pluginModel->onRemove($id);
         $element = $pluginModel->getElement();
         if ($pluginModel->isRepeatElement()) {
             $listModel = $pluginModel->getListModel();
             $db = $listModel->getDb();
             $tableName = $db->quoteName($this->getRepeatElementTableName($pluginModel));
             $db->setQuery('DROP TABLE ' . $tableName);
             $db->execute();
         }
         $listModel = $pluginModel->getListModel();
         $item = $listModel->getTable();
         // $$$ hugh - might be a table-less form!
         if (!empty($item->id)) {
             $db = $listModel->getDb();
             $db->setQuery('ALTER TABLE ' . $db->quoteName($item->db_table_name) . ' DROP ' . $db->quoteName($element->name));
             $db->execute();
         }
     }
     return parent::delete($pks);
 }