/** * Install sample data * * @return void */ public function installSampleData() { $cnn = FabrikWorker::getConnection(); $defaultDb = $cnn->getDb(); $db = FabrikWorker::getDbo(true); $group = $this->getTable('Group'); $config = $this->config; $dbTableName = $config->get('dbprefix') . "fb_contact_sample"; echo "<div style='text-align:left;border:1px dotted #cccccc;padding:10px;'>" . "<h3>Installing data...</h3><ol>"; $group->name = "Contact Details"; $group->label = "Contact Details"; $group->published = 1; if (!$group->store()) { return JError::raiseWarning(500, $group->getError()); } $groupId = $db->insertid(); $defaultDb->dropTable($dbTableName); echo "<li>Group 'Contact Details' created</li>"; echo "<li>Element 'Email' added to group 'Contact Details'</li>"; $group = $this->getTable('Group'); $group->name = "Your Enquiry"; $group->label = "Your Enquiry"; $group->published = 1; $group->store(); $group2Id = $db->insertid(); echo "<li>Group 'Your Enquiry' created</li>"; echo "<li>Element 'Message' added to group 'Your Enquiry'</li>"; $form = $this->getTable('Form'); $form->label = "Contact Us"; $form->record_in_database = 1; $form->intro = "This is a sample contact us form, that is stored in a database table"; $form->submit_button_label = "Submit"; $form->published = 1; $form->form_template = "default"; $form->view_only_template = "default"; $form->store(); echo "<li>Form 'Contact Us' created</li>"; $formId = $db->insertid(); $query = $db->getQuery(true); $query->insert('#__{package}_formgroup')->set(array('form_id=' . (int) $formId, 'group_id=' . (int) $groupId, 'ordering=0')); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true); $query->insert('#__{package}_formgroup')->set(array('form_id=' . (int) $formId, 'group_id=' . (int) $group2Id, 'ordering=1')); $db->setQuery($query); $db->execute(); echo "<li>Groups added to 'Contact Us' form</li>"; $listModel = JModelLegacy::getInstance('List', 'FabrikAdminModel'); $list = $this->getTable('List'); $list->label = "Contact Us Data"; $list->introduction = "This table stores the data submitted in the contact us form"; $list->form_id = $formId; $list->connection_id = $cnn->getConnection()->id; $list->db_table_name = $dbTableName; // Store without name quotes as that's db specific $list->db_primary_key = $dbTableName . '.id'; $list->auto_inc = 1; $list->published = 1; $list->rows_per_page = 10; $list->params = $listModel->getDefaultParams(); $list->template = 'default'; $list->store(); echo "<li>Table for 'Contact Us' created</li></div>"; $form->store(); $formModel = JModelLegacy::getInstance('Form', 'FabrikFEModel'); $formModel->setId($form->id); $formModel->form = $form; $listModel->setState('list.id', $list->id); $listModel->getItem(); $elements = array('id' => array('plugin' => 'internalid', 'label' => 'id', 'group_id' => $groupId), 'first_name' => array('plugin' => 'field', 'label' => 'First Name', 'group_id' => $groupId), 'last_name' => array('plugin' => 'field', 'label' => 'Last Name', 'group_id' => $groupId), 'email' => array('plugin' => 'field', 'label' => 'Email', 'group_id' => $groupId), 'message' => array('plugin' => 'textarea', 'group_id' => $group2Id)); return $listModel->createDBTable($list->db_table_name, $elements); }
/** * Load the database object associated with the list * * @since 3.0b * * @return object database */ public function &getDb() { $listId = $this->getState('list.id'); $item = $this->getItem($listId); return FabrikWorker::getConnection($item)->getDb(); }
/** * After having saved the form we * 1) Create a new group if none selected in edit form list * 2) Delete all old form_group records * 3) Recreate the form group records * 4) Make a list view if needed * * @param array $data jForm data * * @throws Exception * * @return bool True if you should display the form list, False if you're * redirected elsewhere */ public function saveFormGroups($data) { // These are set in parent::save() and contain the updated form id and if the form is a new form $formId = (int) $this->getState($this->getName() . '.id'); $isNew = (bool) $this->getState($this->getName() . '.new'); /** @var FabrikAdminModelList $listModel */ $listModel = JModelLegacy::getInstance('List', 'FabrikAdminModel'); $item = $listModel->loadFromFormId($formId); $listModel->set('form.id', $formId); $listModel->setState('list.form_id', $formId); $recordInDatabase = $data['record_in_database']; $dbTableName = $this->safeTableName($isNew, $data, $item); $fields = $this->getInsertFields($isNew, $data, $listModel, $dbTableName); if ($recordInDatabase != '1') { return; } $dbTableExists = $listModel->databaseTableExists($dbTableName); if (!$dbTableExists) { $listModel->createDBTable($dbTableName, $fields); } if (!$dbTableExists || $isNew) { $connection = FabrikWorker::getConnection(-1); $item->set('id', null); $item->set('label', $data['label']); $item->set('form_id', $formId); $item->set('connection_id', $connection->getConnection()->id); $item->set('db_table_name', $dbTableName); // Store key without quoteNames as that is db specific which we no longer want $item->set('db_primary_key', $dbTableName . '.id'); $item->set('auto_inc', 1); $item->set('published', $data['published']); $item->set('created', $data['created']); $item->set('created_by', $data['created_by']); $item->set('access', 1); $item->set('params', $listModel->getDefaultParams()); $item->store(); $this->contentTypeModel->finalise($item); } else { // Update existing table (seems to need to reload here to ensure that _table is set) $listModel->loadFromFormId($formId); $listModel->ammendTable(); $currentGroups = (array) FArrayHelper::getValue($data, 'current_groups'); $this->_makeFormGroups($currentGroups); } }
/** * Get the lists connection object * sets $this->connection to the lists connection * * @deprecated since 3.0b use FabrikWorker::getConnection() instead * * @return object connection */ public function &getConnection() { $this->connection = FabrikWorker::getConnection($this->getTable()); return $this->connection; }
/** * After having saved the form we * 1) Create a new group if none selected in edit form list * 2) Delete all old form_group records * 3) Recreate the form group records * 4) Make a table view if needed * * @param array $data jform data * * @return bool True if you should display the form list, False if you're * redirected elsewhere */ public function saveFormGroups($data) { // These are set in parent::save() and contain the updated form id and if the form is a new form $formid = $this->getState($this->getName() . '.id'); $isnew = $this->getState($this->getName() . '.new'); $db = FabrikWorker::getDbo(true); $currentGroups = (array) JArrayHelper::getValue($data, 'current_groups'); $record_in_database = $data['record_in_database']; $createGroup = $data['_createGroup']; $form = $this->getForm(); $fields = array('id' => 'internalid', 'date_time' => 'date'); // If new and record in db and group selected then we want to get those groups elements to create fields for in the db table if ($isnew && $record_in_database) { $groups = JArrayHelper::getValue($data, 'current_groups'); if (!empty($groups)) { $query = $db->getQuery(true); $query->select('plugin, name')->from('#__fabrik_elements')->where('group_id IN (' . implode(',', $groups) . ')'); $db->setQuery($query); $rows = $db->loadObjectList(); foreach ($rows as $row) { $fields[$row->name] = $row->plugin; } } } if ($createGroup) { $group = FabTable::getInstance('Group', 'FabrikTable'); $group->name = $data['label']; $group->published = 1; $group->store(); $currentGroups[] = $db->insertid(); } $this->_makeFormGroups($data, $currentGroups); if ($record_in_database == '1') { $listModel = JModel::getInstance('List', 'FabrikModel'); $item = $listModel->loadFromFormId($formid); if ($isnew) { $dbTableName = $data['db_table_name'] !== '' ? $data['db_table_name'] : $data['label']; // Mysql will force db table names to lower case even if you set the db name to upper case - so use clean() $dbTableName = FabrikString::clean($dbTableName); // Otherwise part of the table name is taken for element names $dbTableName = str_replace('___', '_', $dbTableName); } else { $dbTableName = $item->db_table_name == '' ? $data['database_name'] : $item->db_table_name; } $dbTableExists = $listModel->databaseTableExists($dbTableName); if (!$dbTableExists) { /** * @TODO - need to sanitize table name (get rid of non alphanumeirc or _), * just not sure whether to do it here, or above (before we test for existinance) * $$$ hugh - for now, just do it here, after we test for the 'unsanitized', as * need to do some more testing on MySQL table name case sensitivity * BUT ... as we're potentially changing the table name after testing for existance * we need to test again. * $$$ rob - was replacing with '_' but if your form name was 'x - y' then this was * converted to x___y which then blows up element name code due to '___' being presumed to be the element splitter. */ $dbTableName = preg_replace('#[^0-9a-zA-Z_]#', '', $dbTableName); if ($listModel->databaseTableExists($dbTableName)) { return JError::raiseWarning(500, JText::_("COM_FABRIK_DB_TABLE_ALREADY_EXISTS")); } $listModel->set('form.id', $formid); $listModel->createDBTable($dbTableName, $fields); } if (!$dbTableExists || $isnew) { $connection = FabrikWorker::getConnection(-1); $item->id = null; $item->label = $data['label']; $item->form_id = $formid; $item->connection_id = $connection->getConnection()->id; $item->db_table_name = $dbTableName; // Store key without quoteNames as thats db specific *which we no longer want $item->db_primary_key = $dbTableName . '.id'; $item->auto_inc = 1; $item->published = $data['published']; $item->created = $data['created']; $item->created_by = $data['created_by']; $item->access = 1; $item->params = $listModel->getDefaultParams(); $res = $item->store(); } else { // Update existing table (seems to need to reload here to ensure that _table is set $item = $listModel->loadFromFormId($formid); $listModel->ammendTable(); } } }
/** * function get the tables connection object * sets $this->_oConn to the tables connection * @deprecated since 3.0b use FabrikWorker::getConnection() instead * @return object connection */ function &getConnection() { $this->_oConn = FabrikWorker::getConnection($this->getTable()); return $this->_oConn; }
/** * Load the database object associated with the list * * @since 3.0b * * @return object database */ public function &getDb() { return FabrikWorker::getConnection($this->getItem())->getDb(); }