Example #1
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = 'DELETE FROM UserQueries';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $conn = $app->getApplicationBox()->get_connection();
     $sql = 'SELECT * FROM dsel';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $n = 0;
     $em = $app['orm.em'];
     foreach ($rs as $row) {
         if (null === ($user = $this->loadUser($app['orm.em'], $row['usr_id']))) {
             continue;
         }
         $userQuery = new UserQuery();
         $userQuery->setQuery($row['query']);
         $userQuery->setUser($user);
         $em->persist($userQuery);
         $n++;
         if ($n % 1000 === 0) {
             $em->flush();
             $em->clear();
         }
     }
     $em->flush();
     $em->clear();
     return true;
 }
Example #2
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = 'DELETE FROM UserNotificationSettings';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $conn = $app->getApplicationBox()->get_connection();
     $sql = 'SELECT * FROM usr_settings
             WHERE prop LIKE "notification_%"';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $n = 0;
     $em = $app['orm.em'];
     foreach ($rs as $row) {
         if (null === ($user = $this->loadUser($app['orm.em'], $row['usr_id']))) {
             continue;
         }
         $userSetting = new UserNotificationSetting();
         $userSetting->setName($row['prop']);
         $userSetting->setValue($row['value']);
         $userSetting->setUser($user);
         $em->persist($userSetting);
         $n++;
         if ($n % 200 === 0) {
             $em->flush();
             $em->clear();
         }
     }
     $em->flush();
     $em->clear();
     return true;
 }
Example #3
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = 'DELETE FROM FtpExports';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $sql = 'DELETE FROM FtpExportElements';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $conn = $app->getApplicationBox()->get_connection();
     $em = $app['orm.em'];
     $em->getEventManager()->removeEventSubscriber(new TimestampableListener());
     $sql = 'SELECT `id`, `crash`, `nbretry`, `mail`, `addr`, `ssl`,
                 `login`, `pwd`, `passif`,
                 `destfolder`, `sendermail`, `text_mail_sender`,
                 `text_mail_receiver`, `usr_id`, `date`, `foldertocreate`,
                 `logfile`
             FROM ftp_export';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $sql = 'SELECT base_id, record_id, subdef, filename, folder, error, done, businessfields
             FROM ftp_export_elements
             WHERE ftp_export_id = :export_id';
     $stmt = $conn->prepare($sql);
     $n = 0;
     foreach ($rs as $row) {
         if (null === ($user = $this->loadUser($app['orm.em'], $row['usr_id']))) {
             continue;
         }
         $export = new FtpExport();
         $export->setAddr($row['addr'])->setCrash($row['crash'])->setNbretry($row['nbretry'])->setMail($row['mail'])->setSsl($row['ssl'])->setLogin($row['login'])->setPwd($row['pwd'])->setPassif($row['passif'])->setDestfolder($row['destfolder'])->setSendermail($row['sendermail'])->setTextMailReceiver($row['text_mail_sender'])->setTextMailSender($row['text_mail_reveiver'])->setUser($user)->setCreated(new \DateTime($row['date']))->setUpdated(new \DateTime($row['date']))->setFoldertocreate($row['foldertocreate'])->setLogfile($row['logfile']);
         $em->persist($export);
         $stmt->execute(['export_id' => $row['id']]);
         $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         foreach ($rs as $element) {
             $element = new FtpExportElement();
             $element->setBaseId($row['base_id'])->setRecordId($row['record_id'])->setBusinessfields($row['businessfields'])->setCreated(new \DateTime($row['date']))->setUpdated(new \DateTime($row['date']))->setDone(!!$row['done'])->setError(!!$row['error'])->setFilename($row['filename'])->setFolder($row['folder'])->setSubdef($row['subdef'])->setExport($export);
             $export->addElement($element);
             $em->persist($element);
         }
         $n++;
         if ($n % 200 === 0) {
             $em->flush();
             $em->clear();
         }
     }
     $stmt->closeCursor();
     $em->flush();
     $em->clear();
     $em->getEventManager()->addEventSubscriber(new TimestampableListener());
     return true;
 }
Example #4
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = "SHOW TABLE STATUS LIKE 'cache'";
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $row = $stmt->fetch(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     if ($row['Auto_increment']) {
         $sql = sprintf('ALTER TABLE Sessions AUTO_INCREMENT = %d', $row['Auto_increment']);
         $app->getApplicationBox()->get_connection()->exec($sql);
     }
     return true;
 }
Example #5
0
 private function updateRegistry(Application $app)
 {
     $sql = 'SELECT `value` FROM registry WHERE `key` = :key';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute([':key' => 'GV_default_lng']);
     $row = $stmt->fetch(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $locale = null !== $row ? $row['value'] : 'fr';
     $sql = 'UPDATE registry SET `value` = :value WHERE `key` = :key';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute([':key' => 'GV_default_lng', ':value' => $this->extractLocale($locale)]);
     $stmt->closeCursor();
 }
Example #6
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = 'DELETE FROM Tasks';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $sql = 'SELECT task_id, active, crashed, name, class, settings FROM task2';
     $stmt = $appbox->get_connection()->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     foreach ($rs as $row) {
         try {
             $job = $this->createJob($app, $row['class']);
         } catch (\RuntimeException $e) {
             continue;
         }
         $settings = simplexml_load_string($row['settings']);
         $period = $job->getEditor()->getDefaultPeriod();
         if ($settings->period) {
             $period = (int) $settings->period;
             unset($settings->period);
             $row['settings'] = $settings->asXML();
         }
         $task = new Task();
         $task->setCrashed($row['crashed'])->setJobId($job->getJobId())->setName($row['name'])->setPeriod($period)->setSettings($row['settings'])->setStatus($row['active'] ? Task::STATUS_STARTED : Task::STATUS_STOPPED);
         $app['orm.em']->persist($task);
     }
     $app['orm.em']->flush();
 }
Example #7
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $conn = $app->getApplicationBox()->get_connection();
     $sql = 'SELECT date, login, ip, locked
             FROM badlog
             ORDER BY id ASC';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $n = 1;
     foreach ($rs as $row) {
         $date = Datetime::createFromFormat('Y-m-d h:i:s', $row['date']);
         $failure = new AuthFailure();
         if ($date) {
             $failure->setCreated($date);
         }
         $failure->setIp($row['ip']);
         $failure->setLocked(!!$row['locked']);
         $failure->setUsername($row['login']);
         $app['orm.em']->persist($failure);
         if (0 === $n++ % 1000) {
             $app['orm.em']->flush();
             $app['orm.em']->clear();
         }
     }
     $app['orm.em']->flush();
     $app['orm.em']->clear();
     return true;
 }
Example #8
0
 /**
  * Sets the user as "order_master" on a collection
  *
  * @param \collection $collection The collection to apply
  * @param Boolean     $bool       Wheter the user is order master or not
  *
  * @return ACL
  */
 public function set_order_master(\collection $collection, $bool)
 {
     $sql = 'UPDATE basusr SET order_master = :master
             WHERE usr_id = :usr_id AND base_id = :base_id';
     $stmt = $this->app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute([':master' => $bool ? 1 : 0, ':usr_id' => $this->user->getId(), ':base_id' => $collection->get_base_id()]);
     $stmt->closeCursor();
     return $this;
 }
Example #9
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $app['conf']->remove(['main', 'api-timers']);
     if ($this->tableHasField($app['orm.em'], 'api_logs', 'api_log_ressource')) {
         $sql = "ALTER TABLE api_logs CHANGE api_log_ressource api_log_resource varchar(64)";
         $app->getApplicationBox()->get_connection()->executeUpdate($sql);
     }
     return true;
 }
Example #10
0
 public function __construct(Application $app, module_report $report)
 {
     $this->conn = $app->getApplicationBox()->get_connection();
     $this->connbas = $app->findDataboxById($report->getSbasId())->get_connection();
     $this->filter = new module_report_sqlfilter($app, $report);
     $this->sql = '';
     $this->params = [];
     $this->total_row = 0;
     $this->enable_limit = $report->getEnableLimit();
 }
Example #11
0
 public function read(array $notifications, $usr_id)
 {
     if (count($notifications) == 0) {
         return false;
     }
     /** @var Connection $connection */
     $connection = $this->app->getApplicationBox()->get_connection();
     $builder = $connection->createQueryBuilder();
     $builder->update('notifications')->set('unread', '0')->where($builder->expr()->eq('usr_id', ':usr_id'), $builder->expr()->in('id', [':notifications']))->setParameters(['usr_id' => $usr_id, 'notifications' => $notifications], ['usr_id' => PDO::PARAM_INT, 'notifications' => Connection::PARAM_INT_ARRAY])->execute();
     return $this;
 }
 protected function goBackTo35()
 {
     $app = new Application(Application::ENV_TEST);
     $conn = $app->getApplicationBox()->get_connection();
     $this->uninstall();
     file_put_contents(__DIR__ . '/../../../../../config/config.inc', "<?php\n\$servername = 'http://local.phrasea';\n");
     file_put_contents(__DIR__ . '/../../../../../config/connexion.inc', "<?php\n\n\$hostname = '" . $conn->getHost() . "';\n\$port = '" . $conn->getPort() . "';\n\$user = '******';\n\$password = '******';\n\$dbname = '" . $conn->getDatabase() . "';\n            ");
     $this->tearDownHandlers[] = function () {
         @unlink(__DIR__ . '/../../../../../config/config.inc');
         @unlink(__DIR__ . '/../../../../../config/connexion.inc');
     };
 }
Example #13
0
 /**
  * Returns l'objet stockee dans le cache si i l existe sinon instancie
  * un nouveau objet dashboard_feed
  *
  * @param Application $app
  * @param integer     $sbasid
  * @param string      $sbas_coll
  * @param mixed       $dmin
  * @param mixed       $dmax
  */
 public static function getInstance(Application $app, $sbasid, $sbas_coll, $dmin, $dmax)
 {
     $cache_id = 'feed_' . md5($sbasid . '_' . $sbas_coll . '_' . $dmin . '_' . $dmax);
     try {
         $result = $app->getApplicationBox()->get_data_from_cache($cache_id);
         $result->setApplication($app);
         return $result;
     } catch (\Exception $e) {
     }
     $tmp = new self($app, $sbasid, $sbas_coll, $dmin, $dmax);
     $app->getApplicationBox()->set_data_to_cache($tmp, $cache_id);
     return $tmp;
 }
Example #14
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = 'SELECT * FROM registry
             WHERE `key` = :key';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $Regbinaries = ['GV_cli', 'GV_swf_extract', 'GV_pdf2swf', 'GV_swf_render', 'GV_unoconv', 'GV_ffmpeg', 'GV_ffprobe', 'GV_mp4box', 'GV_pdftotext'];
     $mapping = ['GV_cli' => 'php_binary', 'GV_swf_extract' => 'swf_extract_binary', 'GV_pdf2swf' => 'pdf2swf_binary', 'GV_swf_render' => 'swf_render_binary', 'GV_unoconv' => 'unoconv_binary', 'GV_ffmpeg' => 'ffmpeg_binary', 'GV_ffprobe' => 'ffprobe_binary', 'GV_mp4box' => 'mp4box_binary', 'GV_pdftotext' => 'pdftotext_binary'];
     $binaries = ['ghostscript_binary' => null];
     foreach ($Regbinaries as $name) {
         $stmt->execute([':key' => $name]);
         $row = $stmt->fetch(\PDO::FETCH_ASSOC);
         $value = is_executable($row['value']) ? $row['value'] : null;
         $binaries[$mapping[$name]] = $value;
     }
     $stmt->closeCursor();
     $config = $app['configuration.store']->getConfig();
     $config['binaries'] = $binaries;
     $sql = 'DELETE FROM registry WHERE `key` = :key';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     foreach ($Regbinaries as $name) {
         $stmt->execute([':key' => $name]);
     }
     $stmt->closeCursor();
     $sql = 'SELECT value FROM registry WHERE `key` = :key';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute([':key' => 'GV_sit']);
     $row = $stmt->fetch(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $config['main']['key'] = $row['value'];
     $app['configuration.store']->setConfig($config);
     $sql = 'DELETE FROM registry WHERE `key` = :key';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute([':key' => 'GV_sit']);
     $stmt->closeCursor();
     return true;
 }
Example #15
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $databox, Application $app)
 {
     $sql = 'TRUNCATE metadatas';
     $stmt = $databox->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $sql = 'TRUNCATE metadatas_structure';
     $stmt = $databox->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $sql = 'TRUNCATE technical_datas';
     $stmt = $databox->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $phrasea_maps = ['pdftext' => 'Phraseanet:pdftext', 'tf-archivedate' => 'Phraseanet:tf-archivedate', 'tf-atime' => 'Phraseanet:tf-atime', 'tf-chgdocdate' => 'Phraseanet:tf-chgdocdate', 'tf-ctime' => 'Phraseanet:tf-ctime', 'tf-editdate' => 'Phraseanet:tf-editdate', 'tf-mtime' => 'Phraseanet:tf-mtime', 'tf-parentdir' => 'Phraseanet:tf-parentdir', 'tf-bits' => 'Phraseanet:tf-bits', 'tf-channels' => 'Phraseanet:tf-channels', 'tf-extension' => 'Phraseanet:tf-extension', 'tf-filename' => 'Phraseanet:tf-filename', 'tf-filepath' => 'Phraseanet:tf-filepath', 'tf-height' => 'Phraseanet:tf-height', 'tf-mimetype' => 'Phraseanet:tf-mimetype', 'tf-recordid' => 'Phraseanet:tf-recordid', 'tf-size' => 'Phraseanet:tf-size', 'tf-width' => 'Phraseanet:tf-width'];
     $sxe = $databox->get_sxml_structure();
     $dom_struct = $databox->get_dom_structure();
     $xp_struct = $databox->get_xpath_structure();
     foreach ($sxe->description->children() as $fname => $field) {
         $src = trim(isset($field['src']) ? $field['src'] : '');
         if (array_key_exists($src, $phrasea_maps)) {
             $src = $phrasea_maps[$src];
         }
         $nodes = $xp_struct->query('/record/description/' . $fname);
         if ($nodes->length > 0) {
             $node = $nodes->item(0);
             $node->setAttribute('src', $src);
             $node->removeAttribute('meta_id');
         }
     }
     $databox->saveStructure($dom_struct);
     $databox->feed_meta_fields();
     $databox->delete_data_from_cache(databox::CACHE_STRUCTURE);
     $databox->delete_data_from_cache(databox::CACHE_META_STRUCT);
     $conn = $app->getApplicationBox()->get_connection();
     $sql = 'DELETE FROM `task2` WHERE class="readmeta"';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     unset($stmt);
     return true;
 }
Example #16
0
 private function upgradeRegistry(Application $app)
 {
     $sql = 'SELECT `key`, `value`, `type` FROM registry';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $oldRegistry = [];
     foreach ($rows as $row) {
         switch ($row['type']) {
             case 'boolean':
                 $value = (bool) $row['value'];
                 break;
             case 'integer':
                 $value = (int) $row['value'];
                 break;
             default:
             case 'enum':
             case 'string':
             case 'text':
             case 'timezone':
                 $value = $row['value'];
                 break;
             case 'binary':
             case 'enum_multi':
                 continue;
                 break;
         }
         $oldRegistry[$row['key']] = $value;
     }
     $config = $app['configuration.store']->getConfig();
     $config['languages']['default'] = isset($oldRegistry['GV_default_lng']) ? $oldRegistry['GV_default_lng'] : 'fr';
     $config['registry'] = $app['registry.manipulator']->getRegistryData();
     $app['configuration.store']->setConfig($config);
     $mapping = ['GV_homeTitle' => ['registry', 'general', 'title'], 'GV_metaKeywords' => ['registry', 'general', 'keywords'], 'GV_metaDescription' => ['registry', 'general', 'description'], 'GV_googleAnalytics' => ['registry', 'general', 'analytics'], 'GV_allow_search_engine' => ['registry', 'general', 'allow-indexation'], 'GV_home_publi' => ['registry', 'general', 'home-presentation-mode'], 'GV_thesaurus' => ['registry', 'modules', 'thesaurus'], 'GV_multiAndReport' => ['registry', 'modules', 'stories'], 'GV_seeOngChgDoc' => ['registry', 'modules', 'doc-substitution'], 'GV_seeNewThumb' => ['registry', 'modules', 'thumb-substitution'], 'GV_anonymousReport' => ['registry', 'modules', 'anonymous-report'], 'GV_download_max' => ['registry', 'actions', 'download-max-size'], 'GV_validation_reminder' => ['registry', 'actions', 'validation-reminder-days'], 'GV_val_expiration' => ['registry', 'actions', 'validation-expiration-days'], 'GV_needAuth2DL' => ['registry', 'actions', 'auth-required-for-export'], 'GV_requireTOUValidationForExport' => ['registry', 'actions', 'tou-validation-required-for-export'], 'GV_choose_export_title' => ['registry', 'actions', 'export-title-choice'], 'GV_default_export_title' => ['registry', 'actions', 'default-export-title'], 'GV_social_tools' => ['registry', 'actions', 'social-tools'], 'GV_activeFTP' => ['registry', 'ftp', 'ftp-enabled'], 'GV_ftp_for_user' => ['registry', 'ftp', 'ftp-user-access'], 'GV_autoselectDB' => ['registry', 'registration', 'auto-select-collections'], 'GV_autoregister' => ['registry', 'registration', 'auto-register-enabled'], 'GV_ong_search' => ['registry', 'classic', 'search-tab'], 'GV_ong_advsearch' => ['registry', 'classic', 'adv-search-tab'], 'GV_ong_topics' => ['registry', 'classic', 'topics-tab'], 'GV_ong_actif' => ['registry', 'classic', 'active-tab'], 'GV_client_render_topics' => ['registry', 'classic', 'render-topics'], 'GV_rollover_reg_preview' => ['registry', 'classic', 'stories-preview'], 'GV_rollover_chu' => ['registry', 'classic', 'basket-rollover'], 'GV_client_coll_ckbox' => ['registry', 'classic', 'collection-presentation'], 'GV_viewSizeBaket' => ['registry', 'classic', 'basket-size-display'], 'GV_clientAutoShowProposals' => ['registry', 'classic', 'auto-show-proposals'], 'GV_view_bas_and_coll' => ['registry', 'classic', 'collection-display'], 'GV_message' => ['registry', 'maintenance', 'message'], 'GV_message_on' => ['registry', 'maintenance', 'enabled'], 'GV_client_navigator' => ['registry', 'api-clients', 'navigator-enabled'], 'GV_client_officeplugin' => ['registry', 'api-clients', 'office-enabled'], 'GV_google_api' => ['registry', 'webservices', 'google-charts-enabled'], 'GV_i18n_service' => ['registry', 'webservices', 'geonames-server'], 'GV_captchas' => ['registry', 'webservices', 'captcha-enabled'], 'GV_captcha_public_key' => ['registry', 'webservices', 'recaptcha-public-key'], 'GV_captcha_private_key' => ['registry', 'webservices', 'recaptcha-private-key'], 'GV_h264_streaming' => ['registry', 'executables', 'h264-streaming-enabled'], 'GV_mod_auth_token_directory' => ['registry', 'executables', 'auth-token-directory'], 'GV_mod_auth_token_directory_path' => ['registry', 'executables', 'auth-token-directory-path'], 'GV_mod_auth_token_passphrase' => ['registry', 'executables', 'auth-token-passphrase'], 'GV_PHP_INI' => ['registry', 'executables', 'php-conf-path'], 'GV_imagine_driver' => ['registry', 'executables', 'imagine-driver'], 'GV_ffmpeg_threads' => ['registry', 'executables', 'ffmpeg-threads'], 'GV_pdfmaxpages' => ['registry', 'executables', 'pdf-max-pages'], 'GV_min_letters_truncation' => ['registry', 'searchengine', 'min-letters-truncation'], 'GV_defaultQuery' => ['registry', 'searchengine', 'default-query'], 'GV_defaultQuery_type' => ['registry', 'searchengine', 'default-query-type'], 'GV_adminMail' => ['registry', 'email', 'admin-email'], 'GV_defaulmailsenderaddr' => ['registry', 'email', 'emitter-email'], 'GV_email_prefix' => ['registry', 'email', 'prefix'], 'GV_smtp' => ['registry', 'email', 'smtp-enabled'], 'GV_smtp_auth' => ['registry', 'email', 'smtp-auth-enabled'], 'GV_smtp_host' => ['registry', 'email', 'smtp-host'], 'GV_smtp_port' => ['registry', 'email', 'smtp-port'], 'GV_smtp_secure' => ['registry', 'email', 'smtp-secure-mode'], 'GV_smtp_user' => ['registry', 'email', 'smtp-user'], 'GV_smtp_password' => ['registry', 'email', 'smtp-password'], 'GV_base_datapath_noweb' => ['main', 'storage', 'subdefs'], 'GV_youtube_api' => ['main', 'bridge', 'youtube', 'enabled'], 'GV_youtube_client_id' => ['main', 'bridge', 'youtube', 'client_id'], 'GV_youtube_client_secret' => ['main', 'bridge', 'youtube', 'client_secret'], 'GV_youtube_dev_key' => ['main', 'bridge', 'youtube', 'developer_key'], 'GV_flickr_api' => ['main', 'bridge', 'flickr', 'enabled'], 'GV_flickr_client_id' => ['main', 'bridge', 'flickr', 'client_id'], 'GV_flickr_client_secret' => ['main', 'bridge', 'flickr', 'client_secret'], 'GV_dailymotion_api' => ['main', 'bridge', 'dailymotion', 'enabled'], 'GV_dailymotion_client_id' => ['main', 'bridge', 'dailymotion', 'client_id'], 'GV_dailymotion_client_secret' => ['main', 'bridge', 'dailymotion', 'client_secret']];
     foreach ($mapping as $source => $target) {
         if (!isset($oldRegistry[$source])) {
             continue;
         }
         $app['conf']->set($target, $oldRegistry[$source]);
     }
 }
Example #17
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = ' SELECT edit_preset_id, creation_date, title, xml, usr_id, sbas_id
              FROM edit_presets';
     $em = $app['orm.em'];
     $n = 0;
     $em->getEventManager()->removeEventSubscriber(new TimestampableListener());
     foreach ($app->getApplicationBox()->get_connection()->fetchAll($sql) as $row) {
         if (null === ($user = $this->loadUser($app['orm.em'], $row['usr_id']))) {
             continue;
         }
         $preset = new Preset();
         $preset->setUser($user);
         $preset->setSbasId($row['sbas_id']);
         $preset->setTitle($row['title']);
         $fields = [];
         if (false !== ($sx = @simplexml_load_string($row['xml']))) {
             if (false === isset($sx->fields)) {
                 continue;
             }
             foreach ($sx->fields->children() as $name => $value) {
                 $fields[] = ['name' => $name, 'value' => $value];
             }
         }
         $preset->setData($fields);
         $em->persist($preset);
         $n++;
         if ($n % 20 === 0) {
             $em->flush();
             $em->clear();
         }
     }
     $em->flush();
     $em->clear();
     $em->getEventManager()->addEventSubscriber(new TimestampableListener());
     return true;
 }
Example #18
0
 public static function create(Application $app, Bridge_Account $account, record_adapter $record, $title, $status, $type, array $datas = [])
 {
     $sql = 'INSERT INTO bridge_elements
         (id, account_id, sbas_id, record_id, dist_id, title, `type`
           , serialized_datas, status, created_on, updated_on)
         VALUES
         (null, :account_id, :sbas_id, :record_id, null, :title, :type
           ,:datas , :status, NOW(), NOW())';
     $params = [':account_id' => $account->get_id(), ':sbas_id' => $record->get_sbas_id(), ':record_id' => $record->get_record_id(), ':status' => $status, ':title' => $title, ':type' => $type, ':datas' => serialize($datas)];
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute($params);
     $stmt->closeCursor();
     $element_id = $app->getApplicationBox()->get_connection()->lastInsertId();
     return new self($app, $account, $element_id);
 }
Example #19
0
 public static function bas_labels($base_id, Application $app)
 {
     if (!self::$_bas_labels) {
         try {
             self::$_bas_labels = $app->getApplicationBox()->get_data_from_cache(self::CACHE_BAS_LABELS);
         } catch (\Exception $e) {
             foreach ($app->getDataboxes() as $databox) {
                 foreach ($databox->get_collections() as $collection) {
                     self::$_bas_labels[$collection->get_base_id()] = ['fr' => $collection->get_label('fr'), 'en' => $collection->get_label('en'), 'de' => $collection->get_label('de'), 'nl' => $collection->get_label('nl')];
                 }
             }
             $app->getApplicationBox()->set_data_to_cache(self::$_bas_labels, self::CACHE_BAS_LABELS);
         }
     }
     if (isset(self::$_bas_labels[$base_id]) && isset(self::$_bas_labels[$base_id][$app['locale']])) {
         return self::$_bas_labels[$base_id][$app['locale']];
     }
     return 'Unknown collection';
 }
Example #20
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = 'DELETE FROM Orders';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $sql = 'DELETE FROM OrderElements';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $conn = $app->getApplicationBox()->get_connection();
     $sql = 'SELECT id, usr_id, created_on, `usage`, deadline, ssel_id FROM `order`';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $n = 0;
     $em = $app['orm.em'];
     $em->getEventManager()->removeEventSubscriber(new TimestampableListener());
     foreach ($rs as $row) {
         $sql = 'SELECT count(id) as todo
                 FROM order_elements
                 WHERE deny = NULL
                     AND order_id = :id';
         $stmt = $conn->prepare($sql);
         $stmt->execute([':id' => $row['id']]);
         $todo = $stmt->fetch(\PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         if (null === ($user = $this->loadUser($app['orm.em'], $row['usr_id']))) {
             continue;
         }
         try {
             $basket = $app['orm.em']->createQuery('SELECT PARTIAL b.{id} FROM Phraseanet:Basket b WHERE b.id = :id')->setParameters(['id' => $row['ssel_id']])->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true)->getSingleResult();
         } catch (NoResultException $e) {
             continue;
         }
         $order = new Order();
         $order->setUser($user)->setTodo($todo['todo'])->setOrderUsage($row['usage'])->setDeadline(new \DateTime($row['deadline']))->setCreatedOn(new \DateTime($row['created_on']))->setBasket($basket);
         $em->persist($order);
         $sql = 'SELECT base_id, record_id, order_master_id, deny
                 FROM order_elements
                 WHERE order_id = :id';
         $stmt = $conn->prepare($sql);
         $stmt->execute([':id' => $row['id']]);
         $elements = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         foreach ($elements as $element) {
             $orderElement = new OrderElement();
             $user = $this->loadUser($app['orm.em'], $row['usr_id']);
             $orderElement->setBaseId($element['base_id'])->setDeny($element['deny'] === null ? null : (bool) $element['deny'])->setOrder($order)->setOrderMaster($user)->setRecordId($element['record_id']);
             $order->addElement($orderElement);
             $em->persist($orderElement);
         }
         if ($n % 100 === 0) {
             $em->flush();
             $em->clear();
         }
     }
     $em->flush();
     $em->clear();
     $em->getEventManager()->addEventSubscriber(new TimestampableListener());
     return true;
 }
Example #21
0
 /**
  * @param Application $app
  * @param int         $sbas_id
  *
  * @return cache_databox
  */
 public static function refresh(Application $app, $sbas_id)
 {
     if (self::$refreshing) {
         return;
     }
     self::$refreshing = true;
     $databox = $app->findDataboxById((int) $sbas_id);
     $date = new \DateTime('-3 seconds');
     $last_update = null;
     try {
         $last_update = $app->getApplicationBox()->get_data_from_cache('memcached_update_' . $sbas_id);
     } catch (\Exception $e) {
     }
     if ($last_update) {
         $last_update = new \DateTime($last_update);
     } else {
         $last_update = new \DateTime('-10 years');
     }
     if ($date <= $last_update) {
         self::$refreshing = false;
         return;
     }
     $connsbas = $databox->get_connection();
     $sql = 'SELECT type, value FROM memcached WHERE site_id = :site_id';
     $stmt = $connsbas->prepare($sql);
     $stmt->execute([':site_id' => $app['conf']->get('servername')]);
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     foreach ($rs as $row) {
         switch ($row['type']) {
             case 'record':
                 $key = 'record_' . $sbas_id . '_' . $row['value'];
                 $databox->delete_data_from_cache($key);
                 $key = 'record_' . $sbas_id . '_' . $row['value'] . '_' . \record_adapter::CACHE_SUBDEFS;
                 $databox->delete_data_from_cache($key);
                 $key = 'record_' . $sbas_id . '_' . $row['value'] . '_' . \record_adapter::CACHE_GROUPING;
                 $databox->delete_data_from_cache($key);
                 $key = 'record_' . $sbas_id . '_' . $row['value'] . '_' . \record_adapter::CACHE_MIME;
                 $databox->delete_data_from_cache($key);
                 $key = 'record_' . $sbas_id . '_' . $row['value'] . '_' . \record_adapter::CACHE_ORIGINAL_NAME;
                 $databox->delete_data_from_cache($key);
                 $key = 'record_' . $sbas_id . '_' . $row['value'] . '_' . \record_adapter::CACHE_SHA256;
                 $databox->delete_data_from_cache($key);
                 $key = 'record_' . $sbas_id . '_' . $row['value'] . '_' . \record_adapter::CACHE_STATUS;
                 $databox->delete_data_from_cache($key);
                 $key = 'record_' . $sbas_id . '_' . $row['value'] . '_' . \record_adapter::CACHE_TECHNICAL_DATA;
                 $databox->delete_data_from_cache($key);
                 $sql = 'DELETE FROM memcached
           WHERE site_id = :site_id AND type="record" AND value = :value';
                 $params = [':site_id' => $app['conf']->get('servername'), ':value' => $row['value']];
                 $stmt = $connsbas->prepare($sql);
                 $stmt->execute($params);
                 $stmt->closeCursor();
                 $record = new \record_adapter($app, $sbas_id, $row['value']);
                 $record->get_caption()->delete_data_from_cache();
                 foreach ($record->get_subdefs() as $subdef) {
                     $subdef->delete_data_from_cache();
                 }
                 break;
             case 'structure':
                 $app->getApplicationBox()->delete_data_from_cache(\appbox::CACHE_LIST_BASES);
                 $sql = 'DELETE FROM memcached
           WHERE site_id = :site_id AND type="structure" AND value = :value';
                 $params = [':site_id' => $app['conf']->get('servername'), ':value' => $row['value']];
                 $stmt = $connsbas->prepare($sql);
                 $stmt->execute($params);
                 $stmt->closeCursor();
                 break;
         }
     }
     $date = new \DateTime();
     $now = $date->format(DATE_ISO8601);
     $app->getApplicationBox()->set_data_to_cache($now, 'memcached_update_' . $sbas_id);
     $conn = $app->getApplicationBox()->get_connection();
     $sql = 'UPDATE sitepreff SET memcached_update = :date';
     $stmt = $conn->prepare($sql);
     $stmt->execute([':date' => $now]);
     $stmt->closeCursor();
     self::$refreshing = false;
     return;
 }
Example #22
0
 /**
  *
  * @param Application $app
  * @param Bridge_Api  $api
  * @param User        $user
  * @param string      $dist_id
  * @param string      $name
  *
  * @return Bridge_Account
  */
 public static function create(Application $app, Bridge_Api $api, User $user, $dist_id, $name)
 {
     $sql = 'INSERT INTO bridge_accounts
         (id, api_id, dist_id, usr_id, name, created_on, updated_on)
         VALUES (null, :api_id, :dist_id, :usr_id, :name, NOW(), NOW())';
     $params = [':api_id' => $api->get_id(), ':dist_id' => $dist_id, ':usr_id' => $user->getId(), ':name' => $name];
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute($params);
     $stmt->closeCursor();
     $account_id = $app->getApplicationBox()->get_connection()->lastInsertId();
     return new self($app, $api, $account_id);
 }
Example #23
0
 public static function create(Application $app, $name)
 {
     $sql = 'INSERT INTO bridge_apis
         (id, name, disable, disable_time, created_on, updated_on)
         VALUES (null, :name, 0, null, NOW(), NOW())';
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute([':name' => strtolower($name)]);
     $stmt->closeCursor();
     $api_id = $app->getApplicationBox()->get_connection()->lastInsertId();
     return new self($app, $api_id);
 }
Example #24
0
 /**
  *
  * @param  Application $app
  * @param  string      $lst
  * @param  integer     $sstid
  * @param  integer     $storyWZid
  * @return set_export
  */
 public function __construct(Application $app, $lst, $sstid, $storyWZid = null)
 {
     $this->app = $app;
     $download_list = [];
     $remain_hd = [];
     if ($storyWZid) {
         $repository = $app['repo.story-wz'];
         $storyWZ = $repository->findByUserAndId($this->app, $app->getAuthenticatedUser(), $storyWZid);
         $lst = $storyWZ->getRecord($this->app)->get_serialize_key();
     }
     if ($sstid != "") {
         $repository = $app['repo.baskets'];
         /* @var $repository Alchemy\Phrasea\Model\Repositories\BasketRepository */
         $Basket = $repository->findUserBasket($sstid, $app->getAuthenticatedUser(), false);
         $this->exportName = str_replace([' ', '\\', '/'], '_', $Basket->getName()) . "_" . date("Y-n-d");
         foreach ($Basket->getElements() as $basket_element) {
             $base_id = $basket_element->getRecord($this->app)->get_base_id();
             $record_id = $basket_element->getRecord($this->app)->get_record_id();
             if (!isset($remain_hd[$base_id])) {
                 if ($app->getAclForUser($app->getAuthenticatedUser())->is_restricted_download($base_id)) {
                     $remain_hd[$base_id] = $app->getAclForUser($app->getAuthenticatedUser())->remaining_download($base_id);
                 } else {
                     $remain_hd[$base_id] = false;
                 }
             }
             $current_element = $download_list[] = new record_exportElement($app, $basket_element->getRecord($this->app)->get_sbas_id(), $record_id, $Basket->getName(), $remain_hd[$base_id]);
             $remain_hd[$base_id] = $current_element->get_remain_hd();
         }
     } else {
         $this->exportName = "Export_" . date("Y-n-d") . '_' . mt_rand(100, 999);
         $tmp_lst = explode(';', $lst);
         $n = 1;
         foreach ($tmp_lst as $basrec) {
             $basrec = explode('_', $basrec);
             if (count($basrec) != 2) {
                 continue;
             }
             try {
                 $record = new record_adapter($this->app, $basrec[0], $basrec[1]);
             } catch (\Exception_Record_AdapterNotFound $e) {
                 continue;
             }
             if ($record->isStory()) {
                 foreach ($record->get_children() as $child_basrec) {
                     $base_id = $child_basrec->get_base_id();
                     $record_id = $child_basrec->get_record_id();
                     if (!isset($remain_hd[$base_id])) {
                         if ($app->getAclForUser($app->getAuthenticatedUser())->is_restricted_download($base_id)) {
                             $remain_hd[$base_id] = $app->getAclForUser($app->getAuthenticatedUser())->remaining_download($base_id);
                         } else {
                             $remain_hd[$base_id] = false;
                         }
                     }
                     $current_element = $download_list[] = new record_exportElement($app, $child_basrec->get_sbas_id(), $record_id, $record->get_title(null, null, true) . '_' . $n, $remain_hd[$base_id]);
                     $remain_hd[$base_id] = $current_element->get_remain_hd();
                 }
             } else {
                 $base_id = $record->get_base_id();
                 $record_id = $record->get_record_id();
                 if (!isset($remain_hd[$base_id])) {
                     if ($app->getAclForUser($app->getAuthenticatedUser())->is_restricted_download($base_id)) {
                         $remain_hd[$base_id] = $app->getAclForUser($app->getAuthenticatedUser())->remaining_download($base_id);
                     } else {
                         $remain_hd[$base_id] = false;
                     }
                 }
                 $current_element = $download_list[$basrec[0] . '_' . $basrec[1]] = new record_exportElement($app, $record->get_sbas_id(), $record_id, '', $remain_hd[$base_id]);
                 $remain_hd[$base_id] = $current_element->get_remain_hd();
             }
             $n++;
         }
     }
     $this->elements = $download_list;
     $display_download = [];
     $display_orderable = [];
     $this->total_download = 0;
     $this->total_order = 0;
     $this->total_ftp = 0;
     $this->businessFieldsAccess = false;
     foreach ($this->elements as $download_element) {
         if ($app->getAclForUser($app->getAuthenticatedUser())->has_right_on_base($download_element->get_base_id(), 'canmodifrecord')) {
             $this->businessFieldsAccess = true;
         }
         foreach ($download_element->get_downloadable() as $name => $properties) {
             if (!isset($display_download[$name])) {
                 $display_download[$name] = ['size' => 0, 'total' => 0, 'available' => 0, 'refused' => []];
             }
             $display_download[$name]['total']++;
             if ($properties !== false) {
                 $display_download[$name]['available']++;
                 $display_download[$name]['label'] = $properties['label'];
                 $display_download[$name]['class'] = $properties['class'];
                 $this->total_download++;
                 $display_download[$name]['size'] += $download_element->get_size($name);
             } else {
                 $display_download[$name]['refused'][] = $download_element->get_thumbnail();
             }
         }
         foreach ($download_element->get_orderable() as $name => $properties) {
             if (!isset($display_orderable[$name])) {
                 $display_orderable[$name] = ['total' => 0, 'available' => 0, 'refused' => []];
             }
             $display_orderable[$name]['total']++;
             if ($properties !== false) {
                 $display_orderable[$name]['available']++;
                 $this->total_order++;
             } else {
                 $display_orderable[$name]['refused'][] = $download_element->get_thumbnail();
             }
         }
     }
     foreach ($display_download as $name => $values) {
         $display_download[$name]['size'] = (int) $values['size'];
     }
     $display_ftp = [];
     $hasadminright = $app->getAclForUser($app->getAuthenticatedUser())->has_right('addrecord') || $app->getAclForUser($app->getAuthenticatedUser())->has_right('deleterecord') || $app->getAclForUser($app->getAuthenticatedUser())->has_right('modifyrecord') || $app->getAclForUser($app->getAuthenticatedUser())->has_right('coll_manage') || $app->getAclForUser($app->getAuthenticatedUser())->has_right('coll_modify_struct');
     $this->ftp_datas = [];
     if ($this->app['conf']->get(['registry', 'ftp', 'ftp-enabled']) && ($hasadminright || $this->app['conf']->get(['registry', 'ftp', 'ftp-user-access']))) {
         $display_ftp = $display_download;
         $this->total_ftp = $this->total_download;
         $lst_base_id = array_keys($app->getAclForUser($app->getAuthenticatedUser())->get_granted_base());
         if ($hasadminright) {
             $sql = "SELECT Users.id AS usr_id ,Users.login AS usr_login ,Users.email AS usr_mail, FtpCredential.*\n                  FROM (\n                    FtpCredential INNER JOIN Users ON (\n                        FtpCredential.active = 1 AND FtpCredential.user_id = Users.id\n                    ) INNER JOIN basusr ON (\n                        Users.id=basusr.usr_id\n                        AND (basusr.base_id=\n                        '" . implode("' OR basusr.base_id='", $lst_base_id) . "'\n                            )\n                         )\n                      )\n                  GROUP BY Users.id  ";
             $params = [];
         } elseif ($this->app['conf']->get(['registry', 'ftp', 'ftp-user-access'])) {
             $sql = "SELECT Users.id AS usr_id ,Users.login AS usr_login ,Users.email AS usr_mail, FtpCredential.*\n                  FROM (\n                    FtpCredential INNER JOIN Users ON (\n                        FtpCredential.active = 1 AND FtpCredential.id = Users.id\n                    ) INNER JOIN basusr ON (\n                        Users.id=basusr.usr_id\n                        AND Users.id = :usr_id\n                        AND (basusr.base_id=\n                        '" . implode("' OR basusr.base_id='", $lst_base_id) . "'\n                          )\n                        )\n                      )\n                  GROUP BY Users.id  ";
             $params = [':usr_id' => $app->getAuthenticatedUser()->getId()];
         }
         $datas[] = ['name' => $app->trans('export::ftp: reglages manuels'), 'usr_id' => '0', 'address' => '', 'login' => '', 'password' => '', 'ssl' => false, 'dest_folder' => '', 'prefix_folder' => 'Export_' . date("Y-m-d_H.i.s"), 'passive' => false, 'max_retry' => 5, 'sendermail' => $app->getAuthenticatedUser()->getEmail()];
         $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
         $stmt->execute($params);
         $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         foreach ($rs as $row) {
             $datas[] = ['name' => $row["usr_login"], 'usr_id' => $row['usr_id'], 'address' => $row['address'], 'login' => $row['login'], 'password' => $row['password'], 'ssl' => !!$row['tls'], 'dest_folder' => $row['reception_folder'], 'prefix_folder' => strlen(trim($row['repository_prefix_name'])) > 0 ? trim($row['repository_prefix_name']) : 'Export_' . date("Y-m-d_H.i.s"), 'passive' => !!$row['passive'], 'max_retry' => $row['max_retry'], 'usr_mail' => $row['usr_mail'], 'sender_mail' => $app->getAuthenticatedUser()->getEmail()];
         }
         $this->ftp_datas = $datas;
     }
     $this->display_orderable = $display_orderable;
     $this->display_download = $display_download;
     $this->display_ftp = $display_ftp;
     return $this;
 }
Example #25
0
 public function unmount_collection(Application $app)
 {
     $old_coll_id = $this->get_coll_id();
     $old_name = $this->get_name();
     $params = [':base_id' => $this->get_base_id()];
     $query = $app['phraseanet.user-query'];
     $total = $query->on_base_ids([$this->get_base_id()])->include_phantoms(false)->include_special_users(true)->include_invite(true)->include_templates(true)->get_total();
     $n = 0;
     while ($n < $total) {
         $results = $query->limit($n, 50)->execute()->get_results();
         foreach ($results as $user) {
             $app->getAclForUser($user)->delete_data_from_cache(ACL::CACHE_RIGHTS_SBAS);
             $app->getAclForUser($user)->delete_data_from_cache(ACL::CACHE_RIGHTS_BAS);
         }
         $n += 50;
     }
     $sql = "DELETE FROM basusr WHERE base_id = :base_id";
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute($params);
     $stmt->closeCursor();
     $sql = "DELETE FROM bas WHERE base_id = :base_id";
     $stmt = $app->getApplicationBox()->get_connection()->prepare($sql);
     $stmt->execute($params);
     $stmt->closeCursor();
     $this->app['manipulator.registration']->deleteRegistrationsOnCollection($this);
     phrasea::reset_baseDatas($app['phraseanet.appbox']);
     $app['dispatcher']->dispatch(CollectionEvents::UNMOUNTED, new UnmountedEvent(null, array('coll_id' => $old_coll_id, 'coll_name' => $old_name)));
     return $this;
 }
Example #26
0
 /**
  *
  * @param  Application $app
  * @param  string      $host
  * @param  int         $port
  * @param  string      $user
  * @param  string      $password
  * @param  string      $dbname
  * @return databox
  */
 public static function mount(Application $app, $host, $port, $user, $password, $dbname)
 {
     $conn = $app['db.provider'](['host' => $host, 'port' => $port, 'user' => $user, 'password' => $password, 'dbname' => $dbname]);
     $conn->connect();
     $conn = $app->getApplicationBox()->get_connection();
     $sql = 'SELECT MAX(ord) as ord FROM sbas';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $row = $stmt->fetch(PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     if ($row) {
         $ord = $row['ord'] + 1;
     }
     $sql = 'INSERT INTO sbas (sbas_id, ord, host, port, dbname, sqlengine, user, pwd)
           VALUES (null, :ord, :host, :port, :dbname, "MYSQL", :user, :password)';
     $stmt = $conn->prepare($sql);
     $stmt->execute([':ord' => $ord, ':host' => $host, ':port' => $port, ':dbname' => $dbname, ':user' => $user, ':password' => $password]);
     $stmt->closeCursor();
     $sbas_id = (int) $conn->lastInsertId();
     $app->getApplicationBox()->delete_data_from_cache(appbox::CACHE_LIST_BASES);
     $databox = $app->findDataboxById($sbas_id);
     $databox->delete_data_from_cache(databox::CACHE_COLLECTIONS);
     phrasea::reset_sbasDatas($app['phraseanet.appbox']);
     cache_databox::update($app, $databox->get_sbas_id(), 'structure');
     $app['dispatcher']->dispatch(DataboxEvents::MOUNTED, new MountedEvent($databox));
     return $databox;
 }