mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-08 02:24:26 +00:00

Conflicts: CHANGELOG.md bin/console bin/developer bin/setup bower.json composer.json composer.lock features/bootstrap/FeatureContext.php features/bootstrap/GuiContext.php lib/Alchemy/Phrasea/Authentication/Token/TokenValidator.php lib/Alchemy/Phrasea/Command/BuildMissingSubdefs.php lib/Alchemy/Phrasea/Command/CreateCollection.php lib/Alchemy/Phrasea/Command/Developer/JavascriptBuilder.php lib/Alchemy/Phrasea/Controller/Admin/Collection.php lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php lib/Alchemy/Phrasea/Controller/Admin/TaskManager.php lib/Alchemy/Phrasea/Controller/Api/V1.php lib/Alchemy/Phrasea/Controller/Client/Baskets.php lib/Alchemy/Phrasea/Controller/Client/Root.php lib/Alchemy/Phrasea/Controller/Prod/Basket.php lib/Alchemy/Phrasea/Controller/Prod/Export.php lib/Alchemy/Phrasea/Controller/Prod/Property.php lib/Alchemy/Phrasea/Controller/Prod/Records.php lib/Alchemy/Phrasea/Controller/Prod/Tools.php lib/Alchemy/Phrasea/Controller/Prod/Upload.php lib/Alchemy/Phrasea/Controller/Root/Login.php lib/Alchemy/Phrasea/Controller/Thesaurus/Thesaurus.php lib/Alchemy/Phrasea/Core/Event/ApiLoadEndEvent.php lib/Alchemy/Phrasea/Core/Event/ApiLoadStartEvent.php lib/Alchemy/Phrasea/Core/Provider/TaskManagerServiceProvider.php lib/Alchemy/Phrasea/Core/Version.php lib/Alchemy/Phrasea/Exception/XMLParseErrorException.php lib/Alchemy/Phrasea/Helper/DatabaseHelper.php lib/Alchemy/Phrasea/Helper/User/Edit.php lib/Alchemy/Phrasea/SearchEngine/Phrasea/PhraseaEngine.php lib/Alchemy/Phrasea/SearchEngine/SearchEngineOptions.php lib/Doctrine/Entities/AuthFailure.php lib/Doctrine/Entities/Basket.php lib/Doctrine/Entities/BasketElement.php lib/Doctrine/Entities/LazaretAttribute.php lib/Doctrine/Entities/LazaretCheck.php lib/Doctrine/Entities/LazaretFile.php lib/Doctrine/Entities/LazaretSession.php lib/Doctrine/Entities/Session.php lib/Doctrine/Entities/SessionModule.php lib/Doctrine/Entities/StoryWZ.php lib/Doctrine/Entities/UsrList.php lib/Doctrine/Entities/UsrListEntry.php lib/Doctrine/Entities/UsrListOwner.php lib/Doctrine/Entities/ValidationData.php lib/Doctrine/Entities/ValidationParticipant.php lib/Doctrine/Entities/ValidationSession.php lib/Doctrine/Logger/MonologSQLLogger.php lib/Doctrine/Repositories/BasketRepository.php lib/Doctrine/Repositories/ValidationParticipantRepository.php lib/Doctrine/Types/Binary.php lib/Doctrine/Types/Blob.php lib/Doctrine/Types/Enum.php lib/Doctrine/Types/LongBlob.php lib/Doctrine/Types/VarBinary.php lib/classes/API/OAuth2/Account.php lib/classes/API/OAuth2/Application.php lib/classes/API/OAuth2/Application/OfficePlugin.php lib/classes/API/OAuth2/AuthCode.php lib/classes/API/OAuth2/RefreshToken.php lib/classes/API/OAuth2/Token.php lib/classes/API/V1/Abstract.php lib/classes/API/V1/Interface.php lib/classes/API/V1/adapter.php lib/classes/API/V1/exception/abstract.php lib/classes/API/V1/exception/badrequest.php lib/classes/API/V1/exception/forbidden.php lib/classes/API/V1/exception/internalservererror.php lib/classes/API/V1/exception/maintenance.php lib/classes/API/V1/exception/methodnotallowed.php lib/classes/API/V1/exception/notfound.php lib/classes/API/V1/exception/unauthorized.php lib/classes/API/V1/result.php lib/classes/Exception/Feed/EntryNotFound.php lib/classes/Exception/Feed/ItemNotFound.php lib/classes/Exception/Feed/PublisherNotFound.php lib/classes/Feed/Abstract.php lib/classes/Feed/Adapter.php lib/classes/Feed/Aggregate.php lib/classes/Feed/Collection.php lib/classes/Feed/CollectionInterface.php lib/classes/Feed/Entry/Adapter.php lib/classes/Feed/Entry/Collection.php lib/classes/Feed/Entry/CollectionInterface.php lib/classes/Feed/Entry/Interface.php lib/classes/Feed/Entry/Item.php lib/classes/Feed/Entry/ItemInterface.php lib/classes/Feed/Interface.php lib/classes/Feed/Link.php lib/classes/Feed/LinkInterface.php lib/classes/Feed/Publisher/Adapter.php lib/classes/Feed/Publisher/Interface.php lib/classes/Feed/Token.php lib/classes/Feed/TokenAggregate.php lib/classes/Feed/XML/Abstract.php lib/classes/Feed/XML/Atom.php lib/classes/Feed/XML/Cooliris.php lib/classes/Feed/XML/Interface.php lib/classes/Feed/XML/RSS.php lib/classes/Feed/XML/RSS/Image.php lib/classes/Feed/XML/RSS/ImageInterface.php lib/classes/User/Adapter.php lib/classes/User/Interface.php lib/classes/appbox/register.php lib/classes/connection.php lib/classes/connection/abstract.php lib/classes/connection/interface.php lib/classes/connection/pdo.php lib/classes/connection/pdoStatementDebugger.php lib/classes/deprecated/countries.php lib/classes/deprecated/inscript.api.php lib/classes/eventsmanager/event/test.php lib/classes/ftpclient.php lib/classes/http/request.php lib/classes/media/subdef.php lib/classes/module/console/schedulerStart.php lib/classes/module/console/schedulerState.php lib/classes/module/console/schedulerStop.php lib/classes/module/console/taskState.php lib/classes/module/console/tasklist.php lib/classes/module/console/taskrun.php lib/classes/patch/320alpha4b.php lib/classes/patch/3715alpha1a.php lib/classes/patch/379alpha1a.php lib/classes/patch/380alpha10a.php lib/classes/patch/380alpha11a.php lib/classes/patch/380alpha13a.php lib/classes/patch/380alpha14a.php lib/classes/patch/380alpha15a.php lib/classes/patch/380alpha16a.php lib/classes/patch/380alpha17a.php lib/classes/patch/380alpha18a.php lib/classes/patch/380alpha3a.php lib/classes/patch/380alpha4a.php lib/classes/patch/380alpha6a.php lib/classes/patch/380alpha8a.php lib/classes/patch/380alpha9a.php lib/classes/patch/381alpha1b.php lib/classes/patch/381alpha2a.php lib/classes/patch/381alpha3a.php lib/classes/patch/381alpha4a.php lib/classes/patch/383alpha1a.php lib/classes/patch/383alpha2a.php lib/classes/patch/383alpha3a.php lib/classes/patch/383alpha4a.php lib/classes/record/adapter.php lib/classes/record/preview.php lib/classes/recordutils.php lib/classes/recordutils/audio.php lib/classes/recordutils/document.php lib/classes/recordutils/map.php lib/classes/recordutils/video.php lib/classes/registry.php lib/classes/registryInterface.php lib/classes/set/order.php lib/classes/system/url.php lib/classes/task/Scheduler.php lib/classes/task/appboxAbstract.php lib/classes/task/databoxAbstract.php lib/classes/task/manager.php lib/classes/task/period/RecordMover.php lib/classes/task/period/apibridge.php lib/classes/task/period/apiwebhooks.php lib/classes/task/period/archive.php lib/classes/task/period/cindexer.php lib/classes/task/period/emptyColl.php lib/classes/task/period/ftp.php lib/classes/task/period/ftpPull.php lib/classes/task/period/subdef.php lib/classes/task/period/test.php lib/classes/task/period/writemeta.php lib/conf.d/PhraseaFixture/AbstractWZ.php lib/conf.d/PhraseaFixture/Basket/LoadFiveBaskets.php lib/conf.d/PhraseaFixture/Basket/LoadOneBasket.php lib/conf.d/PhraseaFixture/Basket/LoadOneBasketEnv.php lib/conf.d/PhraseaFixture/Lazaret/LoadOneFile.php lib/conf.d/PhraseaFixture/Story/LoadOneStory.php lib/conf.d/PhraseaFixture/UsrLists/ListAbstract.php lib/conf.d/PhraseaFixture/UsrLists/UsrList.php lib/conf.d/PhraseaFixture/UsrLists/UsrListEntry.php lib/conf.d/PhraseaFixture/UsrLists/UsrListOwner.php lib/conf.d/PhraseaFixture/ValidationParticipant/LoadOneParticipant.php lib/conf.d/PhraseaFixture/ValidationParticipant/LoadParticipantWithSession.php lib/conf.d/PhraseaFixture/ValidationSession/LoadOneValidationSession.php templates/web/admin/collection/collection.html.twig templates/web/common/dialog_export.html.twig templates/web/common/menubar.html.twig templates/web/prod/actions/Tools/index.html.twig templates/web/prod/index.html.twig templates/web/prod/upload/upload-flash.html.twig templates/web/prod/upload/upload.html.twig templates/web/report/report_layout_child.html.twig templates/web/setup/step2.html.twig templates/web/thesaurus/new-synonym-dialog.html.twig templates/web/thesaurus/properties.html.twig templates/web/thesaurus/search.html.twig tests/Alchemy/Tests/Phrasea/Application/ApiAbstract.php tests/Alchemy/Tests/Phrasea/Cache/FactoryTest.php tests/Alchemy/Tests/Phrasea/Controller/Admin/AdminCollectionTest.php tests/Alchemy/Tests/Phrasea/Controller/Client/RootTest.php
446 lines
13 KiB
PHP
446 lines
13 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Phraseanet
|
|
*
|
|
* (c) 2005-2015 Alchemy
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
use Alchemy\Phrasea\Application;
|
|
use Doctrine\ORM\Tools\SchemaTool;
|
|
use MediaAlchemyst\Alchemyst;
|
|
use MediaAlchemyst\Specification\Image as ImageSpecification;
|
|
use Symfony\Component\Filesystem\Filesystem;
|
|
use Symfony\Component\HttpFoundation\File\File as SymfoFile;
|
|
use Symfony\Component\Finder\Finder;
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
use vierbergenlars\SemVer\version;
|
|
|
|
class appbox extends base
|
|
{
|
|
/**
|
|
*
|
|
* @var int
|
|
*/
|
|
protected $id;
|
|
|
|
/**
|
|
*
|
|
* constant defining the app type
|
|
*/
|
|
const BASE_TYPE = self::APPLICATION_BOX;
|
|
|
|
/**
|
|
*
|
|
* @var <type>
|
|
*/
|
|
protected $cache;
|
|
protected $connection;
|
|
protected $app;
|
|
|
|
protected $databoxes;
|
|
|
|
const CACHE_LIST_BASES = 'list_bases';
|
|
const CACHE_SBAS_IDS = 'sbas_ids';
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @return appbox
|
|
*/
|
|
public function __construct(Application $app)
|
|
{
|
|
$this->app = $app;
|
|
$connexion = $app['conf']->get(['main', 'database']);
|
|
$this->connection = $app['dbal.provider']->get($connexion);
|
|
|
|
$this->host = $connexion['host'];
|
|
$this->port = $connexion['port'];
|
|
$this->user = $connexion['user'];
|
|
$this->passwd = $connexion['password'];
|
|
$this->dbname = $connexion['dbname'];
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function write_collection_pic(Alchemyst $alchemyst, Filesystem $filesystem, collection $collection, SymfoFile $pathfile = null, $pic_type)
|
|
{
|
|
$filename = null;
|
|
|
|
if (!is_null($pathfile)) {
|
|
|
|
if (!in_array(mb_strtolower($pathfile->getMimeType()), ['image/gif', 'image/png', 'image/jpeg', 'image/jpg', 'image/pjpeg'])) {
|
|
throw new \InvalidArgumentException('Invalid file format');
|
|
}
|
|
|
|
$filename = $pathfile->getPathname();
|
|
|
|
if ($pic_type === collection::PIC_LOGO) {
|
|
//resize collection logo
|
|
$imageSpec = new ImageSpecification();
|
|
|
|
$media = $this->app['mediavorus']->guess($filename);
|
|
|
|
if ($media->getWidth() > 120 || $media->getHeight() > 24) {
|
|
$imageSpec->setResizeMode(ImageSpecification::RESIZE_MODE_INBOUND_FIXEDRATIO);
|
|
$imageSpec->setDimensions(120, 24);
|
|
}
|
|
|
|
$tmp = tempnam(sys_get_temp_dir(), 'tmpdatabox') . '.jpg';
|
|
|
|
try {
|
|
$alchemyst->turninto($pathfile->getPathname(), $tmp, $imageSpec);
|
|
$filename = $tmp;
|
|
} catch (\MediaAlchemyst\Exception $e) {
|
|
|
|
}
|
|
} elseif ($pic_type === collection::PIC_PRESENTATION) {
|
|
//resize collection logo
|
|
$imageSpec = new ImageSpecification();
|
|
$imageSpec->setResizeMode(ImageSpecification::RESIZE_MODE_INBOUND_FIXEDRATIO);
|
|
$imageSpec->setDimensions(650, 200);
|
|
|
|
$tmp = tempnam(sys_get_temp_dir(), 'tmpdatabox') . '.jpg';
|
|
|
|
try {
|
|
$alchemyst->turninto($pathfile->getPathname(), $tmp, $imageSpec);
|
|
$filename = $tmp;
|
|
} catch (\MediaAlchemyst\Exception $e) {
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
switch ($pic_type) {
|
|
case collection::PIC_WM;
|
|
$collection->reset_watermark();
|
|
break;
|
|
case collection::PIC_LOGO:
|
|
case collection::PIC_PRESENTATION:
|
|
break;
|
|
case collection::PIC_STAMP:
|
|
$collection->reset_stamp();
|
|
break;
|
|
default:
|
|
throw new \InvalidArgumentException('unknown pic_type');
|
|
break;
|
|
}
|
|
|
|
if ($pic_type == collection::PIC_LOGO) {
|
|
$collection->update_logo($pathfile);
|
|
}
|
|
|
|
$file = $this->app['root.path'] . '/config/' . $pic_type . '/' . $collection->get_base_id();
|
|
$custom_path = $this->app['root.path'] . '/www/custom/' . $pic_type . '/' . $collection->get_base_id();
|
|
|
|
foreach ([$file, $custom_path] as $target) {
|
|
|
|
if (is_file($target)) {
|
|
|
|
$filesystem->remove($target);
|
|
}
|
|
|
|
if (null === $target || null === $filename) {
|
|
continue;
|
|
}
|
|
|
|
$filesystem->mkdir(dirname($target), 0750);
|
|
$filesystem->copy($filename, $target, true);
|
|
$filesystem->chmod($target, 0760);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function write_databox_pic(Alchemyst $alchemyst, Filesystem $filesystem, databox $databox, SymfoFile $pathfile = null, $pic_type)
|
|
{
|
|
$filename = null;
|
|
|
|
if (!is_null($pathfile)) {
|
|
|
|
if (!in_array(mb_strtolower($pathfile->getMimeType()), ['image/jpeg', 'image/jpg', 'image/pjpeg', 'image/png', 'image/gif'])) {
|
|
throw new \InvalidArgumentException('Invalid file format');
|
|
}
|
|
}
|
|
|
|
if (!in_array($pic_type, [databox::PIC_PDF])) {
|
|
throw new \InvalidArgumentException('unknown pic_type');
|
|
}
|
|
|
|
if ($pathfile) {
|
|
|
|
$filename = $pathfile->getPathname();
|
|
|
|
$imageSpec = new ImageSpecification();
|
|
$imageSpec->setResizeMode(ImageSpecification::RESIZE_MODE_INBOUND_FIXEDRATIO);
|
|
$imageSpec->setDimensions(120, 35);
|
|
|
|
$tmp = tempnam(sys_get_temp_dir(), 'tmpdatabox') . '.jpg';
|
|
|
|
try {
|
|
$alchemyst->turninto($pathfile->getPathname(), $tmp, $imageSpec);
|
|
$filename = $tmp;
|
|
} catch (\MediaAlchemyst\Exception $e) {
|
|
|
|
}
|
|
}
|
|
|
|
$file = $this->app['root.path'] . '/config/minilogos/' . $pic_type . '_' . $databox->get_sbas_id() . '.jpg';
|
|
$custom_path = $this->app['root.path'] . '/www/custom/minilogos/' . $pic_type . '_' . $databox->get_sbas_id() . '.jpg';
|
|
|
|
foreach ([$file, $custom_path] as $target) {
|
|
|
|
if (is_file($target)) {
|
|
$filesystem->remove($target);
|
|
}
|
|
|
|
if (is_null($filename)) {
|
|
continue;
|
|
}
|
|
|
|
$filesystem->mkdir(dirname($target));
|
|
$filesystem->copy($filename, $target);
|
|
$filesystem->chmod($target, 0760);
|
|
}
|
|
|
|
$databox->delete_data_from_cache('printLogo');
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param collection $collection
|
|
* @param <type> $ordre
|
|
* @return appbox
|
|
*/
|
|
public function set_collection_order(collection $collection, $ordre)
|
|
{
|
|
$sqlupd = "UPDATE bas SET ord = :ordre WHERE base_id = :base_id";
|
|
$stmt = $this->get_connection()->prepare($sqlupd);
|
|
$stmt->execute([':ordre' => $ordre, ':base_id' => $collection->get_base_id()]);
|
|
$stmt->closeCursor();
|
|
|
|
$collection->get_databox()->delete_data_from_cache(\databox::CACHE_COLLECTIONS);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param databox $databox
|
|
* @param <type> $boolean
|
|
* @return appbox
|
|
*/
|
|
public function set_databox_indexable(databox $databox, $boolean)
|
|
{
|
|
$boolean = !!$boolean;
|
|
$sql = 'UPDATE sbas SET indexable = :indexable WHERE sbas_id = :sbas_id';
|
|
|
|
$stmt = $this->get_connection()->prepare($sql);
|
|
$stmt->execute([
|
|
':indexable' => ($boolean ? '1' : '0'),
|
|
':sbas_id' => $databox->get_sbas_id()
|
|
]);
|
|
$stmt->closeCursor();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param databox $databox
|
|
* @return <type>
|
|
*/
|
|
public function is_databox_indexable(databox $databox)
|
|
{
|
|
$sql = 'SELECT indexable FROM sbas WHERE sbas_id = :sbas_id';
|
|
|
|
$stmt = $this->get_connection()->prepare($sql);
|
|
$stmt->execute([':sbas_id' => $databox->get_sbas_id()]);
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
$stmt->closeCursor();
|
|
|
|
$indexable = $row ? $row['indexable'] : null;
|
|
|
|
return (Boolean) $indexable;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return const
|
|
*/
|
|
public function get_base_type()
|
|
{
|
|
return self::BASE_TYPE;
|
|
}
|
|
|
|
public function forceUpgrade(Setup_Upgrade $upgrader, Application $app)
|
|
{
|
|
$from_version = $this->get_version();
|
|
|
|
$app['phraseanet.cache-service']->flushAll();
|
|
|
|
// Executes stuff before applying patches
|
|
$app['phraseanet.pre-schema-upgrader']->apply($app);
|
|
|
|
$finder = new Finder();
|
|
$in = [];
|
|
foreach ($app['cache.paths'] as $path) {
|
|
$in[] = $path.'/minify/';
|
|
$in[] = $path.'/twig/';
|
|
$in[] = $path.'/translations/';
|
|
$in[] = $path.'/profiler/';
|
|
$in[] = $path.'/doctrine/';
|
|
$in[] = $path.'/serializer/';
|
|
};
|
|
$finder->in(array_filter($in, function($path) {
|
|
return is_dir($path);
|
|
}))
|
|
->depth(0)
|
|
->ignoreVCS(true)
|
|
->ignoreDotFiles(true);
|
|
|
|
|
|
$app['filesystem']->remove($finder);
|
|
|
|
foreach ([
|
|
'config/custom_files/' => 'www/custom/',
|
|
'config/minilogos/' => 'www/custom/minilogos/',
|
|
'config/stamp/' => 'www/custom/stamp/',
|
|
'config/status/' => 'www/custom/status/',
|
|
'config/wm/' => 'www/custom/wm/',
|
|
] as $source => $target) {
|
|
$app['filesystem']->mirror($this->app['root.path'] . '/' . $source, $this->app['root.path'] . '/' . $target, null, array('override' => true));
|
|
}
|
|
|
|
$advices = $this->upgradeDB(true, $app);
|
|
|
|
foreach ($this->get_databoxes() as $s) {
|
|
$advices = array_merge($advices, $s->upgradeDB(true, $app));
|
|
}
|
|
|
|
$this->post_upgrade($app);
|
|
|
|
$app['phraseanet.cache-service']->flushAll();
|
|
|
|
if ($app['EM']->getConnection()->getDatabasePlatform()->supportsAlterTable()) {
|
|
$tool = new SchemaTool($app['EM']);
|
|
$metas = $app['EM']->getMetadataFactory()->getAllMetadata();
|
|
$tool->updateSchema($metas, true);
|
|
}
|
|
|
|
if (version::lt($from_version, '3.1')) {
|
|
$upgrader->addRecommendation($app->trans('Your install requires data migration, please execute the following command'), 'bin/setup system:upgrade-datas --from=3.1');
|
|
} elseif (version::lt($from_version, '3.5')) {
|
|
$upgrader->addRecommendation($app->trans('Your install requires data migration, please execute the following command'), 'bin/setup system:upgrade-datas --from=3.5');
|
|
}
|
|
|
|
if (version::lt($from_version, '3.7')) {
|
|
$upgrader->addRecommendation($app->trans('Your install might need to re-read technical datas'), 'bin/console records:rescan-technical-datas');
|
|
$upgrader->addRecommendation($app->trans('Your install might need to build some sub-definitions'), 'bin/console records:build-missing-subdefs');
|
|
}
|
|
|
|
return $advices;
|
|
}
|
|
|
|
protected function post_upgrade(Application $app)
|
|
{
|
|
$this->apply_patches($this->get_version(), $app['phraseanet.version']->getNumber(), true, $app);
|
|
$this->setVersion($app['phraseanet.version']);
|
|
|
|
foreach ($this->get_databoxes() as $databox) {
|
|
$databox->apply_patches($databox->get_version(), $app['phraseanet.version']->getNumber(), true, $app);
|
|
$databox->setVersion($app['phraseanet.version']);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return Array
|
|
*/
|
|
public function get_databoxes()
|
|
{
|
|
if ($this->databoxes) {
|
|
return $this->databoxes;
|
|
}
|
|
|
|
$ret = [];
|
|
foreach ($this->retrieve_sbas_ids() as $sbas_id) {
|
|
try {
|
|
$databox = new \databox($this->app, $sbas_id);
|
|
if (!$this->app['conf.restrictions']->isDataboxAvailable($databox)) {
|
|
continue;
|
|
}
|
|
$ret[$sbas_id] = $databox;
|
|
} catch (NotFoundHttpException $e) {
|
|
$this->app['monolog']->error(sprintf('Databox %s is not reliable.', $databox->get_sbas_id()));
|
|
}
|
|
}
|
|
|
|
$this->databoxes = $ret;
|
|
|
|
return $this->databoxes;
|
|
}
|
|
|
|
protected function retrieve_sbas_ids()
|
|
{
|
|
try {
|
|
return $this->get_data_from_cache(self::CACHE_SBAS_IDS);
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
$sql = 'SELECT sbas_id FROM sbas';
|
|
|
|
$ret = [];
|
|
|
|
$stmt = $this->get_connection()->prepare($sql);
|
|
$stmt->execute();
|
|
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
$stmt->closeCursor();
|
|
|
|
foreach ($rs as $row) {
|
|
$ret[] = (int) $row['sbas_id'];
|
|
}
|
|
|
|
$this->set_data_to_cache($ret, self::CACHE_SBAS_IDS);
|
|
|
|
return $ret;
|
|
}
|
|
|
|
public function get_databox($sbas_id)
|
|
{
|
|
$databoxes = $this->get_databoxes();
|
|
|
|
if (!array_key_exists($sbas_id, $databoxes)) {
|
|
throw new NotFoundHttpException('Databox `' . $sbas_id . '` not found');
|
|
}
|
|
|
|
return $databoxes[$sbas_id];
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param <type> $option
|
|
* @return string
|
|
*/
|
|
public function get_cache_key($option = null)
|
|
{
|
|
return 'appbox_' . ($option ? $option . '_' : '');
|
|
}
|
|
|
|
public function delete_data_from_cache($option = null)
|
|
{
|
|
if ($option === appbox::CACHE_LIST_BASES) {
|
|
$this->databoxes = null;
|
|
}
|
|
|
|
parent::delete_data_from_cache($option);
|
|
}
|
|
}
|