Exemplo n.º 1
0
 /**
  * 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);
             }
         }
     }
 }
Exemplo n.º 2
0
 /**
  * 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');
 }
Exemplo n.º 3
0
 /**
  * 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');
 }