/** * Grouping tables that haven't been discovered * * @param bool $persist Persist the group * * @return NenoContentElementGroup */ public static function groupingTablesNotDiscovered($persist = true) { /* @var $db NenoDatabaseDriverMysqlx */ $db = JFactory::getDbo(); // Get all the tables that haven't been detected using naming convention. $tablesNotDiscovered = self::getTablesNotDiscovered(); $tablesAdded = false; $otherGroup = null; if (!empty($tablesNotDiscovered)) { // Check if this group exists already $query = $db->getQuery(true); $query->select('g.id')->from('#__neno_content_element_groups AS g')->where('NOT EXISTS (SELECT 1 FROM #__neno_content_element_groups_x_extensions AS ge WHERE ge.group_id = g.id)'); $db->setQuery($query); $groupId = $db->loadResult(); if (!empty($groupId)) { /* @var $otherGroup NenoContentElementGroup */ $otherGroup = NenoContentElementGroup::load($groupId); } else { $otherGroup = new NenoContentElementGroup(array('group_name' => 'Other')); } $tablesIgnored = NenoHelper::getDoNotTranslateTables(); foreach ($tablesNotDiscovered as $tableNotDiscovered) { if (!in_array($tableNotDiscovered, $tablesIgnored)) { // Create an array with the table information $tableData = array('tableName' => $tableNotDiscovered, 'primaryKey' => $db->getPrimaryKey($tableNotDiscovered), 'translate' => 1, 'group' => $otherGroup); // Create ContentElement object $table = new NenoContentElementTable($tableData); // Get all the columns a table contains $fields = $db->getTableColumns($table->getTableName()); foreach ($fields as $fieldName => $fieldType) { $fieldData = array('fieldName' => $fieldName, 'fieldType' => $fieldType, 'translate' => NenoContentElementField::isTranslatableType($fieldType), 'table' => $table); $field = new NenoContentElementField($fieldData); $table->addField($field); } $otherGroup->addTable($table); $tablesAdded = true; } } $otherGroup->setAssignedTranslationMethods(NenoHelper::getTranslationMethodsForLanguages()); if ($persist) { $otherGroup->persist(); } } if (!$tablesAdded) { $otherGroup = null; } return $otherGroup; }
/** * Create Table instance * * @param string $tableName Table name * @param NenoContentElementGroup $group Group * * @return NenoContentElementTable */ public static function createTableInstance($tableName, NenoContentElementGroup $group) { /* @var $db NenoDatabaseDriverMysqlx */ $db = JFactory::getDbo(); // Create an array with the table information $tableData = array('tableName' => $tableName, 'primaryKey' => $db->getPrimaryKey($tableName), 'translate' => !$group->isOtherGroup(), 'group' => $group); // Create ContentElement object $table = new NenoContentElementTable($tableData); // Get all the columns a table contains $fields = $db->getTableColumns($table->getTableName()); foreach ($fields as $fieldName => $fieldType) { $fieldData = array('fieldName' => $fieldName, 'fieldType' => $fieldType, 'translate' => NenoContentElementField::isTranslatableType($fieldType), 'table' => $table); $field = new NenoContentElementField($fieldData); $table->addField($field); } return $table; }
/** * Toggle translate status for tables * * @return void */ public function toggleContentElementTable() { NenoLog::log('Method toggleContentElementTable of NenoControllerGroupsElements called', 3); $input = JFactory::getApplication()->input; $tableId = $input->getInt('tableId'); $translateStatus = $input->getInt('translateStatus'); /* @var $table NenoContentElementTable */ $table = NenoContentElementTable::getTableById($tableId); // If the table exists, let's work with it. if ($table !== false) { $table->setTranslate($translateStatus, true); if ($table->persist() !== false) { $fields = $table->getFields(false); /* @var $field NenoContentElementField */ foreach ($fields as $field) { $oldStatus = $field->isTranslate(); $field->setTranslate($translateStatus === true ? NenoContentElementField::isTranslatableType($field->getFieldType()) : $translateStatus, true); // Only persist element that have changed their translate status if ($oldStatus != $field->isTranslate()) { $field->persist(); } } } else { NenoLog::log('Error saving new state!', NenoLog::PRIORITY_ERROR); } } JFactory::getApplication()->close(); }
/** * Get all the tables of the component that matches with the Joomla naming convention. * * @param NenoContentElementGroup $group Component name * @param string $tablePattern Table Pattern * @param bool $includeDiscovered Included tables that have been discovered already * * @return array */ public static function getComponentTables(NenoContentElementGroup $group, $tablePattern = null, $includeDiscovered = true) { /* @var $db NenoDatabaseDriverMysqlx */ $db = JFactory::getDbo(); $tables = $db->getComponentTables($tablePattern === null ? $group->getGroupName() : $tablePattern); $result = array(); for ($i = 0; $i < count($tables); $i++) { // Get Table name $tableName = self::unifyTableName($tables[$i]); $table = null; $tablesIgnored = self::getDoNotTranslateTables(); if (!in_array($tableName, $tablesIgnored)) { if (!self::isTableAlreadyDiscovered($tableName)) { // Create an array with the table information $tableData = array('tableName' => $tableName, 'primaryKey' => $db->getPrimaryKey($tableName), 'translate' => 1, 'group' => $group); // Create ContentElement object $table = new NenoContentElementTable($tableData); // Get all the columns a table contains $fields = $db->getTableColumns($table->getTableName()); foreach ($fields as $fieldName => $fieldType) { $fieldData = array('fieldName' => $fieldName, 'fieldType' => $fieldType, 'translate' => NenoContentElementField::isTranslatableType($fieldType), 'table' => $table); $field = new NenoContentElementField($fieldData); $table->addField($field); } } elseif ($includeDiscovered) { $table = NenoContentElementTable::load(array('table_name' => $tableName, 'group_id' => $group->getId())); } } if (!empty($table)) { $result[] = $table; } } return $result; }