/** * Initializes the database with the init data for the data module. */ public function init() { // create database entries in the data module if (isset($this->_init->options['init']['data']['databases']) && is_array($this->_init->options['init']['data']['databases'])) { $dataDatabasesModel = new Data_Model_Databases(); if ($dataDatabasesModel->getResource()->countRows() == 0) { foreach ($this->_init->options['init']['data']['databases'] as $a) { echo ' Generating metadata for database: ' . $a['name'] . PHP_EOL; $a['publication_role_id'] = Daiquiri_Auth::getInstance()->getRoleId($a['publication_role']); unset($a['publication_role']); try { $r = $dataDatabasesModel->create($a); } catch (Exception $e) { $this->_error("Error in creating database metadata:\n" . $e->getMessage()); } $this->_check($r, $a); } } // create table entries in the data module if (isset($this->_init->options['init']['data']['tables']) && is_array($this->_init->options['init']['data']['tables'])) { // get the ids of the databases $database_ids = array_flip($dataDatabasesModel->getResource()->fetchValues('name')); $dataTablesModel = new Data_Model_Tables(); if ($dataTablesModel->getResource()->countRows() == 0) { foreach ($this->_init->options['init']['data']['tables'] as $a) { echo ' Generating metadata for table: ' . $a['name'] . PHP_EOL; $a['database_id'] = $database_ids[$a['database']]; unset($a['database']); $a['publication_role_id'] = Daiquiri_Auth::getInstance()->getRoleId($a['publication_role']); unset($a['publication_role']); try { $r = $dataTablesModel->create(null, $a); } catch (Exception $e) { $this->_error("Error in creating tables metadata:\n" . $e->getMessage()); } $this->_check($r, $a); } } // create column entries in the data module if (isset($this->_init->options['init']['data']['columns']) && is_array($this->_init->options['init']['data']['columns'])) { // get the ids of the databases $table_ids = array_flip($dataTablesModel->getResource()->fetchValues('name')); $dataColumnsModel = new Data_Model_Columns(); if ($dataColumnsModel->getResource()->countRows() == 0) { foreach ($this->_init->options['init']['data']['columns'] as $a) { $a['table_id'] = $table_ids[$a['table']]; unset($a['table']); // $a['publication_role_id'] = Daiquiri_Auth::getInstance()->getRoleId($a['publication_role']); // unset($a['publication_role']); try { $r = $dataColumnsModel->create(null, $a); } catch (Exception $e) { $this->_error("Error in creating columns metadata:\n" . $e->getMessage()); } $this->_check($r, $a); } } } } } // // create function entries in the tables module if (isset($this->_init->options['init']['data']['functions']) && is_array($this->_init->options['init']['data']['functions'])) { $dataFunctionsModel = new Data_Model_Functions(); if ($dataFunctionsModel->getResource()->countRows() == 0) { foreach ($this->_init->options['init']['data']['functions'] as $a) { $a['publication_role_id'] = Daiquiri_Auth::getInstance()->getRoleId($a['publication_role']); unset($a['publication_role']); try { $r = $dataFunctionsModel->create($a); } catch (Exception $e) { $this->_error("Error in creating function metadata:\n" . $e->getMessage()); } $this->_check($r, $a); } } } // create function entries in the tables module if (isset($this->_init->options['init']['data']['static']) && is_array($this->_init->options['init']['data']['static'])) { $dataStaticModel = new Data_Model_Static(); if ($dataStaticModel->getResource()->countRows() == 0) { foreach ($this->_init->options['init']['data']['static'] as $a) { $a['publication_role_id'] = Daiquiri_Auth::getInstance()->getRoleId($a['publication_role']); unset($a['publication_role']); try { $r = $dataStaticModel->create($a); } catch (Exception $e) { $this->_error("Error in creating function metadata:\n" . $e->getMessage()); } $this->_check($r, $a); } } } }
/** * Returns all tables for export. * @return array $response */ public function export() { // get databases $databasesModel = new Data_Model_Databases(); $databases = $databasesModel->getResource()->fetchValues('name'); $rows = array(); foreach ($this->getResource()->fetchRows() as $dbRow) { $rows[] = array('database' => $databases[$dbRow['database_id']], 'name' => $dbRow['name'], 'order' => $dbRow['order'], 'description' => $dbRow['description'], 'publication_select' => $dbRow['publication_select'], 'publication_update' => $dbRow['publication_update'], 'publication_insert' => $dbRow['publication_insert'], 'publication_role' => Daiquiri_Auth::getInstance()->getRole($dbRow['publication_role_id'])); } return array('data' => array('tables' => $rows), 'status' => 'ok'); }
/** * Returns all databases and tables which the user has access to. * @return array $response */ public function databases() { // get all databases from database model $databasesModel = new Data_Model_Databases(); $rows = array(); foreach ($databasesModel->getResource()->fetchRows() as $row) { $database = $databasesModel->getResource()->fetchRow($row['id'], true, true); $database['publication_role'] = Daiquiri_Auth::getInstance()->getRole($database['publication_role_id']); foreach ($database['tables'] as $key => $table) { $database['tables'][$key]['publication_role'] = Daiquiri_Auth::getInstance()->getRole($table['publication_role_id']); } $rows[] = $database; } // check permissions and build array $databases = array(); foreach ($rows as $database) { if (Daiquiri_Auth::getInstance()->checkPublicationRoleId($database['publication_role_id'])) { $db = array('id' => $database['id'], 'name' => $database['name'], 'value' => $databasesModel->getResource()->quoteIdentifier($database['name']), 'tooltip' => $database['description'], 'tables' => array()); foreach ($database['tables'] as $table) { if (Daiquiri_Auth::getInstance()->checkPublicationRoleId($table['publication_role_id'])) { $t = array('id' => $table['id'], 'name' => $table['name'], 'value' => $databasesModel->getResource()->quoteIdentifier($database['name'], $table['name']), 'tooltip' => $table['description'], 'columns' => array()); foreach ($table['columns'] as $column) { $tooltip = array(); if (!empty($column['description'])) { $tooltip[] = $column['description']; } if (!empty($column['type'])) { $tooltip[] = "<i>Type:</i> {$column['type']}"; } if (!empty($column['unit'])) { $tooltip[] = "<i>Unit:</i> {$column['unit']}"; } if (!empty($column['ucd'])) { $tooltip[] = "<i>UCD:</i> {$column['ucd']}"; } $t['columns'][] = array('id' => $column['id'], 'name' => $column['name'], 'value' => $databasesModel->getResource()->quoteIdentifier($column['name']), 'tooltip' => implode('<br />', $tooltip)); } $db['tables'][] = $t; } } $databases[] = $db; } } // get current username and the user db $username = Daiquiri_Auth::getInstance()->getCurrentUsername(); $userDbName = Daiquiri_Config::getInstance()->getUserDbName($username); // prepare auto increment counters $table_id = 1; $column_id = 1; // prepate userdb array $userdb = array('id' => 'userdb', 'name' => $userDbName, 'value' => $databasesModel->getResource()->quoteIdentifier($userDbName), 'tooltip' => 'Your personal database', 'tables' => array()); // get tables of this database $resource = new Data_Model_Resource_Viewer(); $resource->init($userdb['name']); $usertables = $resource->fetchTables(); // find all the user tables that are currently open and cannot be queried for information // get the user adapter $adapter = Daiquiri_Config::getInstance()->getUserDbAdapter(); $lockedTables = $adapter->query('SHOW OPEN TABLES IN `' . $userdb['name'] . '` WHERE In_use > 0')->fetchAll(); foreach ($lockedTables as $table) { $key = array_search($table['Table'], $usertables); if ($key !== false) { unset($usertables[$key]); } } foreach ($usertables as $usertable) { $table = array('id' => 'userdb-table-' . $table_id++, 'name' => $usertable, 'value' => $databasesModel->getResource()->quoteIdentifier($userDbName, $usertable), 'columns' => array()); try { $resource->init($userdb['name'], $usertable); } catch (Exception $e) { continue; } $usercolumns = array_keys($resource->fetchCols()); foreach ($usercolumns as $usercolumn) { $table['columns'][] = array('id' => 'userdb-column-' . $column_id++, 'name' => $usercolumn, 'value' => $databasesModel->getResource()->quoteIdentifier($usercolumn)); } $userdb['tables'][] = $table; } $databases[] = $userdb; return array('databases' => $databases, 'status' => 'ok'); }