/** * take a table name and make elements for all of its fields * @param int group id * @param string $tableName */ function makeElementsFromFields($groupId, $tableName) { $fabrikDb =& $this->getFEModel()->getDb(); $dispatcher = JDispatcher::getInstance(); $elementModel = new plgFabrik_Element($dispatcher); $pluginManager = $this->getFormModel()->getPluginManager(); $user = JFactory::getUser(); $elementTypes = JRequest::getVar('elementtype', array(), 'default', 'array'); $fields = $fabrikDb->getTableFields(array($tableName)); $fields = $fields[$tableName]; $createdate = JFactory::getDate()->toMySQL(); $key = $this->getFEModel()->getPrimaryKeyAndExtra($tableName); $ordering = 0; // no existing fabrik table so we take a guess at the most //relavent element types to create $elementLabels = JRequest::getVar('elementlabels', array(), 'default', 'array'); foreach ($fields as $label => $type) { $element = FabTable::getInstance('Element', 'FabrikTable'); if (array_key_exists($ordering, $elementTypes)) { //if importing from a CSV file then we have userselect field definitions $plugin = $elementTypes[$ordering]; } else { //if the field is the primary key and it's an INT type set the plugin to be the fabrik internal id if ($key[0]['colname'] == $label && strtolower(substr($key[0]['type'], 0, 3)) === 'int') { $plugin = 'internalid'; } else { //otherwise guestimate! switch ($type) { case "int": case "tinyint": case "varchar": $plugin = 'field'; break; case "text": case "tinytext": case "mediumtext": case "longtext": $plugin = 'textarea'; break; case "datetime": case "date": case "time": case "timestamp": $plugin = 'date'; break; default: $plugin = 'field'; break; } } } $element->plugin = $plugin; $element->hidden = $element->label == 'id' ? '1' : '0'; $element->group_id = $groupId; $element->name = $label; $element->created = $createdate; $element->created_by = $user->get('id'); $element->created_by_alias = $user->get('username'); $element->published = '1'; $element->show_in_list_summary = '1'; switch ($plugin) { case 'textarea': $element->width = '40'; break; case 'date': $element->width = '10'; break; default: $element->width = '30'; break; } $element->height = '6'; $element->ordering = $ordering; $element->params = $elementModel->getDefaultAttribs(); $element->label = JArrayHelper::getValue($elementLabels, $ordering, str_replace("_", " ", $label)); if (!$element->store()) { return JError::raiseError(500, $element->getError()); } $elementModel =& $pluginManager->getPlugIn($element->plugin, 'element'); $elementModel->setId($element->id); $elementModel->_element = $element; // hack for user element $details = array('group_id' => $element->group_id); JRequest::setVar('details', $details); $elementModel->onSave(); $ordering++; } }