/** * {@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; }
/** * {@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; }
/** * {@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; }
/** * {@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; }
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(); }
/** * {@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(); }
/** * {@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; }
/** * 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; }
/** * {@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; }
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(); }
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'); }; }
/** * 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; }
/** * {@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; }
/** * {@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; }
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]); } }
/** * {@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; }
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); }
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'; }
/** * {@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; }
/** * @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; }
/** * * @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); }
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); }
/** * * @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; }
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; }
/** * * @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; }