/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $dql = 'SELECT u FROM Phraseanet:User u WHERE u.nonce IS NULL'; $q = $app['orm.em']->createQuery($dql); $q->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); $users = $q->getResult(); $n = 0; foreach ($users as $user) { $user->setNonce($app['random.medium']->generateString(64)); $app['orm.em']->persist($user); $n++; if ($n % 100 === 0) { $app['orm.em']->flush(); } } $app['orm.em']->flush(); $sql = 'SELECT task_id, `class` FROM task2'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt->closeCursor(); $sql = 'UPDATE task2 SET `class` = :class WHERE task_id = :task_id'; $stmt = $appbox->get_connection()->prepare($sql); foreach ($rs as $row) { if (strpos($row['class'], 'task_period_') !== false) { continue; } $params = [':task_id' => $row['task_id'], ':class' => str_replace('task_', 'task_period_', $row['class'])]; $stmt->execute($params); } $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'SELECT `key`, `value` FROM `registry` WHERE `key` = "GV_X_Accel_Redirect" OR `key` = "GV_X_Accel_Redirect_mount_point" OR `key` = "GV_modxsendfile"'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $registry = ['GV_X_Accel_Redirect' => null, 'GV_X_Accel_Redirect_mount_point' => null, 'GV_modxsendfile' => null]; foreach ($rows as $row) { $registry[$row['key']] = $row['value']; } $xsendfilePath = $registry['GV_X_Accel_Redirect']; $xsendfileMountPoint = $registry['GV_X_Accel_Redirect_mount_point']; $config = $app['configuration.store']->setDefault('xsendfile')->getConfig(); $config['xsendfile']['enabled'] = (bool) $registry['GV_modxsendfile']; $config['xsendfile']['type'] = $config['xsendfile']['enabled'] ? 'nginx' : ''; if (null !== $xsendfilePath && null !== $xsendfileMountPoint) { $config['xsendfile']['mapping'] = [['directory' => $xsendfilePath, 'mount-point' => $xsendfileMountPoint]]; } $app['configuration.store']->setConfig($config); $toRemove = ['GV_X_Accel_Redirect', 'GV_X_Accel_Redirect_mount_point', 'GV_modxsendfile']; $sql = 'DELETE FROM registry WHERE `key` = :k'; $stmt = $appbox->get_connection()->prepare($sql); foreach ($toRemove as $registryKey) { $stmt->execute([':k' => $registryKey]); } $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $sql = 'UPDATE record r, subdef s SET r.mime = s.mime WHERE r.record_id = s.record_id AND s.name="document"'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $sql = 'UPDATE subdef s, record r SET s.updated_on = r.moddate, s.created_on = r.credate WHERE s.record_id = r.record_id'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $sql = 'UPDATE subdef SET `name` = LOWER( `name` )'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $dom = $databox->get_dom_structure(); $xpath = $databox->get_xpath_structure(); $nodes = $xpath->query('//record/subdefs/subdefgroup/subdef'); foreach ($nodes as $node) { $name = mb_strtolower(trim($node->getAttribute('name'))); if ($name === '') { continue; } $node->setAttribute('name', $name); } $databox->saveStructure($dom); return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $sql = 'SELECT id, src FROM metadatas_structure'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt->closeCursor(); $update = []; $tagDirname = new \Alchemy\Phrasea\Metadata\Tag\TfDirname(); $tagBasename = new \Alchemy\Phrasea\Metadata\Tag\TfBasename(); foreach ($rs as $row) { if (strpos(strtolower($row['src']), 'tf-parentdir') !== false) { $update[] = ['id' => $row['id'], 'src' => $tagDirname->getTagname()]; } if (strpos(strtolower($row['src']), 'tf-filename') !== false) { $update[] = ['id' => $row['id'], 'src' => $tagBasename->getTagname()]; } } $sql = 'UPDATE metadatas_structure SET src = :src WHERE id = :id'; $stmt = $databox->get_connection()->prepare($sql); foreach ($update as $row) { $stmt->execute([':src' => $row['src'], ':id' => $row['id']]); } $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'SELECT `value` FROM `registry` WHERE `key` = "GV_i18n_service"'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $row = $stmt->fetch(\PDO::FETCH_ASSOC); $stmt->closeCursor(); if (null !== $row && false !== strpos($row['value'], 'localization.webservice.alchemyasp.com')) { $sql = 'UPDATE `registry` SET `value` = "http://geonames.alchemyasp.com/" WHERE `key` = "GV_i18n_service"'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); } return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $conn = $databox->get_connection(); $sql = 'SELECT value FROM pref WHERE prop = "structure"'; $stmt = $conn->prepare($sql); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); if (!$result) { throw new \RuntimeException('Unable to find structure'); } $DOMDocument = new DOMDocument(); $DOMDocument->loadXML($result['value']); $XPath = new DOMXPath($DOMDocument); foreach ($XPath->query('/record/subdefs/subdefgroup/subdef/delay') as $delay) { $delay->nodeValue = min(500, max(50, (int) $delay->nodeValue * 400)); } foreach ($XPath->query('/record/subdefs/subdefgroup/subdef/acodc') as $acodec) { if ($acodec->nodeValue == 'faac') { $acodec->nodeValue = 'libvo_aacenc'; } } $sql = 'UPDATE pref SET value = :structure WHERE prop = "structure"'; $stmt = $conn->prepare($sql); $stmt->execute([':structure' => $DOMDocument->saveXML()]); $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $sql = "UPDATE metadatas_structure SET `aggregable`=20 WHERE `aggregable`=1"; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $sql = "SHOW INDEX FROM metadatas_structure WHERE KEY_NAME = 'sorter'"; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); if (count($rows) === 0) { return true; } $sql = "DROP INDEX sorter ON metadatas_structure"; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { if (!$this->hasSessionTable($app)) { return true; } // Remove deleted users sessions $sql = 'SELECT s.id FROM `Sessions` s INNER JOIN Users u ON (u.id = s.user_id) WHERE u.deleted = 1'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); foreach ($rows as $row) { if (null !== ($session = $app['repo.sessions']->find($row['id']))) { $app['orm.em']->remove($session); } } // Remove API sessions $query = $app['orm.em']->createQuery('SELECT s FROM Phraseanet:Session s WHERE s.user_agent LIKE :guzzle'); $query->setParameter(':guzzle', 'Guzzle%'); foreach ($query->getResult() as $session) { $app['orm.em']->remove($session); } $app['orm.em']->flush(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'DELETE FROM Tasks'; $stmt = $app['phraseanet.appbox']->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['EM']->persist($task); } $app['EM']->flush(); }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $sql = "UPDATE log_docs SET `action`='mail' WHERE `action`='download' AND LOCATE('@', comment)"; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'SELECT id, `usage` FROM `order`'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $sql = 'UPDATE `order` SET `usage` = :usage WHERE id = :id'; $stmt = $appbox->get_connection()->prepare($sql); foreach ($rs as $row) { $stmt->execute([':usage' => strip_tags($row['usage']), ':id' => $row['id']]); } $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'DELETE FROM basusr WHERE actif = "0"'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'SELECT base_id, usr_id FROM order_masters'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt->closeCursor(); $sql = 'UPDATE basusr SET order_master="1" WHERE base_id = :base_id AND usr_id = :usr_id'; $stmt = $appbox->get_connection()->prepare($sql); foreach ($rs as $row) { $params = [':base_id' => $row['base_id'], ':usr_id' => $row['usr_id']]; $stmt->execute($params); } $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $sql = 'UPDATE record SET parent_record_id = "1" WHERE parent_record_id != "0"'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'UPDATE permalinks SET label = "untitled" WHERE label = ""'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'UPDATE basusr SET nowatermark=1 WHERE needwatermark=0'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); unset($stmt); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $perRequest = 100; $offset = 0; do { $sql = sprintf('SELECT id, datas, type FROM notifications ORDER BY id ASC LIMIT %d, %d', $offset, $perRequest); $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $sql = 'UPDATE notifications SET datas = :json WHERE id = :id'; $stmt = $appbox->get_connection()->prepare($sql); foreach ($rs as $row) { $json = $row['datas']; if (false !== ($sx = @simplexml_load_string($row['datas']))) { $data = []; foreach ($sx->children() as $name => $value) { $data[$name] = (string) $value; } if ($row['type'] === 'notify_uploadquarantine') { $data['reasons'] = []; if (isset($sx->reasons)) { foreach ($sx->reasons as $reason) { $data['reasons'][] = (string) $reason->checkClassName; } } } if (in_array($row['type'], ['notify_autoregister', 'notify_register'])) { $data['base_ids'] = []; if (isset($sx->base_ids)) { foreach ($sx->base_ids as $base_id) { $data['base_ids'][] = (int) $base_id->base_id; } } } $json = json_encode($data); } $stmt->execute([':id' => $row['id'], ':json' => $json]); } $stmt->closeCursor(); $offset += $perRequest; } while (count($rs) > 0); 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; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { try { $sql = 'ALTER TABLE `metadatas` DROP INDEX `unique`'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); } catch (DBALException $e) { } return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $sql = 'SELECT id, src FROM metadatas_structure'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt->closeCursor(); $update = []; foreach ($rs as $row) { $src = str_replace(['/rdf:RDF/rdf:Description/PHRASEANET:', '/rdf:RDF/rdf:Description/'], ['Phraseanet:', ''], $row['src']); $update[] = ['id' => $row['id'], 'src' => $src]; } $sql = 'UPDATE metadatas_structure SET src = :src WHERE id = :id'; $stmt = $databox->get_connection()->prepare($sql); foreach ($update as $row) { $stmt->execute([':src' => $row['src'], ':id' => $row['id']]); } $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $conn = $appbox->get_connection(); $sql = 'SELECT sbas_id, record_id, id FROM BasketElements'; $stmt = $conn->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt->closeCursor(); foreach ($result as $row) { $sbas_id = (int) $row['sbas_id']; try { $connbas = $app->findDataboxById($sbas_id)->get_connection(); $connbas->connect(); } catch (\Exception $e) { $conn->exec('DELETE FROM ValidationDatas WHERE basket_element_id = ' . $row['id']); $conn->exec('DELETE FROM BasketElements WHERE id = ' . $row['id']); continue; } $sql = 'SELECT record_id FROM record WHERE record_id = :record_id'; $stmt = $connbas->prepare($sql); $stmt->execute([':record_id' => $row['record_id']]); $rowCount = $stmt->rowCount(); $stmt->closeCursor(); if ($rowCount == 0) { $conn->exec('DELETE FROM ValidationDatas WHERE basket_element_id = ' . $row['id']); $conn->exec('DELETE FROM BasketElements WHERE id = ' . $row['id']); } } $dql = "SELECT b FROM Phraseanet:Basket b WHERE b.description != ''"; $n = 0; $perPage = 100; $query = $app['orm.em']->createQuery($dql)->setFirstResult($n)->setMaxResults($perPage); $paginator = new Paginator($query, true); $count = count($paginator); while ($n < $count) { $query = $app['orm.em']->createQuery($dql)->setFirstResult($n)->setMaxResults($perPage); $paginator = new Paginator($query, true); foreach ($paginator as $basket) { $htmlDesc = $basket->getDescription(); $description = trim(strip_tags(str_replace("<br />", "\n", $htmlDesc))); if ($htmlDesc == $description) { continue; } $basket->setDescription($description); } $n += $perPage; $app['orm.em']->flush(); } $app['orm.em']->flush(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = "SELECT usr_id, prop, value FROM usr_settings\n WHERE prop = 'editing_top_box'\n OR prop = 'editing_right_box'\n OR prop = 'editing_left_box'"; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $sql = 'UPDATE usr_settings SET value = :value WHERE usr_id = :usr_id AND prop = :prop'; $stmt = $appbox->get_connection()->prepare($sql); foreach ($rows as $row) { $value = $row['value']; if ('px' === substr($value, -2)) { $value = 35; } elseif ('%' === substr($value, -1)) { $value = substr($value, 0, -1); } $stmt->execute([':value' => $value, ':usr_id' => $row['usr_id'], ':prop' => $row['prop']]); } $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'SELECT base_id, ord, sbas_id FROM `bas` ORDER BY sbas_id, ord'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $sbasData = []; $sbas_id = null; $reorder = []; foreach ($rs as $row) { $sbasData[$row['sbas_id']][] = ['base_id' => $row['base_id']]; if ($sbas_id !== $row['sbas_id']) { $orders = []; } $sbas_id = $row['sbas_id']; if (in_array($row['ord'], $orders, true)) { $reorder[] = $row['sbas_id']; } $orders[] = $row['ord']; } $reorder = array_unique($reorder); if (count($reorder) > 0) { $sql = 'UPDATE bas SET ord = :ord WHERE base_id = :base_id'; $stmt = $appbox->get_connection()->prepare($sql); foreach ($reorder as $sbas_id) { $i = 1; foreach ($sbasData[$sbas_id] as $data) { $stmt->execute(['base_id' => $data['base_id'], 'ord' => $i++]); } } $stmt->closeCursor(); } return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $sql = 'REPLACE INTO records_rights ( SELECT null as id, usr_id, b.sbas_id, record_id, "1" as document, null as preview, "push" as `case`, pushFrom as pusher_usr_id FROM sselcont c, ssel s, bas b WHERE c.ssel_id = s.ssel_id AND b.base_id = c.base_id AND c.canHD = 1 )'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { // Clean validation sessions where initiator_id does not exist anymore $sql = 'SELECT DISTINCT(v.id) AS validation_session_id FROM `ValidationSessions` v LEFT JOIN Users u ON (v.initiator_id = u.id) WHERE u.id IS NULL'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); foreach ($rows as $row) { try { $vsession = $app['orm.em']->createQuery('SELECT PARTIAL s.{id} FROM Phraseanet:ValidationSession s WHERE s.id = :id')->setParameters(['id' => $row['validation_session_id']])->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true)->getSingleResult(); $app['orm.em']->remove($vsession); } catch (NoResultException $e) { } } $app['orm.em']->flush(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $conn = $appbox->get_connection(); $sql = 'SELECT settings FROM task2 WHERE class="task_period_cindexer" LIMIT 1'; $stmt = $conn->prepare($sql); $stmt->execute(); $row = $stmt->fetch(\PDO::FETCH_ASSOC); $stmt->closeCursor(); if (!$row) { return false; } $sxe = simplexml_load_string($row['settings']); $indexer = $sxe->binpath . '/phraseanet_indexer'; $app['conf']->set(['main', 'binaries', 'phraseanet_indexer'], $indexer); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { try { $sql = 'SELECT usr_id, user_agent, ip, platform, browser, app, browser_version, screen, token, nonce, lastaccess, created_on FROM cache'; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); } catch (DBALException $e) { // this may fail on oldest versions return false; } foreach ($rs as $row) { if (null === ($user = $this->loadUser($app['EM'], $row['usr_id']))) { continue; } $created = $updated = null; if ('0000-00-00 00:00:00' !== $row['created_on']) { $created = \DateTime::createFromFormat('Y-m-d H:i:s', $row['created_on']); } if ('0000-00-00 00:00:00' !== $row['lastaccess']) { $updated = \DateTime::createFromFormat('Y-m-d H:i:s', $row['lastaccess']); } $session = new Session(); $session->setUser($user)->setUserAgent($row['user_agent'])->setUpdated($updated)->setToken($row['token'])->setPlatform($row['platform'])->setNonce($row['nonce'])->setIpAddress($row['ip'])->setCreated($created)->setBrowserVersion($row['browser_version'])->setBrowserName($row['browser']); $sizes = explode('x', $row['screen']); if (2 === count($sizes)) { $session->setScreenWidth($sizes[0])->setScreenHeight($sizes[1]); } if (false !== ($apps = @unserialize($row['app']))) { foreach ($apps as $appli) { $module = new SessionModule(); $module->setModuleId($appli)->setCreated($created)->setSession($session)->setUpdated($updated); $session->addModule($module); $app['EM']->persist($module); } } $app['EM']->persist($session); } $app['EM']->flush(); return true; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { $propSql = $propArgs = []; $n = 0; foreach ($app['settings']->getUsersSettings() as $prop => $value) { if ('start_page_query' === $prop) { continue; } $propSql[] = '(prop = :prop_' . $n . ' AND value = :value_' . $n . ')'; $propArgs[':prop_' . $n] = $prop; $propArgs[':value_' . $n] = $value; $n++; } $sql = "DELETE FROM usr_settings\n WHERE 1 AND (" . implode(' OR ', $propSql) . " OR value IS NULL OR (value = 1 AND prop LIKE 'notification_%'))"; $stmt = $appbox->get_connection()->prepare($sql); $stmt->execute($propArgs); $stmt->closeCursor(); return true; }
/** * {@inheritdoc} */ public function apply(base $databox, Application $app) { $conn = $databox->get_connection(); $removeProc = "DROP PROCEDURE IF EXISTS explode_log_table"; $stmt = $conn->prepare($removeProc); $stmt->execute(); $stmt->closeCursor(); unset($stmt); $procedure = "\n CREATE PROCEDURE explode_log_table(bound VARCHAR(255))\n BEGIN\n DECLARE l_log_id INT UNSIGNED DEFAULT 0;\n DECLARE l_coll_list TEXT;\n DECLARE occurance INT DEFAULT 0;\n DECLARE i INT DEFAULT 0;\n DECLARE dest_coll_id INT;\n DECLARE done INT DEFAULT 0;\n DECLARE result_set CURSOR FOR\n SELECT l.id, l.coll_list\n FROM log l\n LEFT JOIN log_colls lc ON (lc.log_id = l.id)\n WHERE (lc.log_id IS NULL) AND coll_list != '';\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;\n OPEN result_set;\n read_loop: LOOP\n FETCH result_set INTO l_log_id, l_coll_list;\n IF done THEN\n LEAVE read_loop;\n END IF;\n SET occurance = (SELECT LENGTH(l_coll_list) - LENGTH(REPLACE(l_coll_list, bound, ''))+1);\n SET i=1;\n START TRANSACTION;\n WHILE i <= occurance DO\n SET dest_coll_id = (SELECT REPLACE(\n SUBSTRING(\n SUBSTRING_INDEX(l_coll_list, bound, i),\n LENGTH(SUBSTRING_INDEX(l_coll_list, bound, i - 1)) + 1\n ),\n ',',\n ''\n ));\n IF dest_coll_id > 0 THEN\n INSERT INTO log_colls VALUES (null, l_log_id, dest_coll_id);\n END IF;\n SET i = i + 1;\n END WHILE;\n COMMIT;\n END LOOP;\n CLOSE result_set;\n END;"; $stmt = $conn->prepare($procedure); $stmt->execute(); $stmt->closeCursor(); $sql = "CALL explode_log_table(',')"; $stmt = $conn->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $stmt = $conn->prepare($removeProc); $stmt->execute(); $stmt->closeCursor(); return true; }