diff --git a/bin/console b/bin/console index 5c700318c5..c7b33da11d 100755 --- a/bin/console +++ b/bin/console @@ -22,6 +22,7 @@ use Alchemy\Phrasea\Command\UpgradeDBDatas; use Alchemy\Phrasea\Command\RescanTechnicalDatas; use Alchemy\Phrasea\Command\BuildMissingSubdefs; use Alchemy\Phrasea\Command\RecordAdd; +use Alchemy\Phrasea\Command\CreateCollection; use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -89,6 +90,8 @@ try { $app->add(new \module_console_fieldsRename('fields:rename')); $app->add(new \module_console_fieldsMerge('fields:merge')); + $app->add(new CreateCollection('collection:create')); + $app->add(new RecordAdd('records:add')); $app->add(new RescanTechnicalDatas('records:rescan-technical-datas')); $app->add(new BuildMissingSubdefs('records:build-missing-subdefs')); diff --git a/lib/Alchemy/Phrasea/Command/CreateCollection.php b/lib/Alchemy/Phrasea/Command/CreateCollection.php new file mode 100644 index 0000000000..de3c3f4553 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/CreateCollection.php @@ -0,0 +1,83 @@ +setDescription('Create a collection in Phraseanet') + ->setHelp('') + ->addArgument('databox_id', InputArgument::REQUIRED, 'The id of the databox where to create the collection', null) + ->addArgument('collname', InputArgument::REQUIRED, 'The name of the new collection', null) + ->addOption('base_id_rights', 'd', InputOption::VALUE_OPTIONAL, 'Duplicate rights from another collection', null); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function requireSetup() + { + return true; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + $core = \bootstrap::getCore(); + + $appbox = \appbox::get_instance($core); + $databox = $appbox->get_databox((int) $input->getArgument('databox_id')); + + $new_collection = \collection::create($databox, $appbox, $input->getArgument('collname')); + + if ($new_collection && $input->getOption('duplicate_rights_from_base_id')) { + + $query = new \User_Query($appbox); + $total = $query->on_base_ids(array($input->getOption('duplicate_rights_from_base_id')))->get_total(); + + $n = 0; + while ($n < $total) { + $results = $query->limit($n, 40)->execute()->get_results(); + foreach ($results as $user) { + $user->ACL()->duplicate_right_from_bas($input->getOption('duplicate_rights_from_base_id'), $new_collection->get_base_id()); + } + $n+=40; + } + } + + User_Adapter::reset_sys_admins_rights(); + } +} diff --git a/lib/Alchemy/Phrasea/Command/RecordAdd.php b/lib/Alchemy/Phrasea/Command/RecordAdd.php index fb1410bea4..29e88e8e48 100644 --- a/lib/Alchemy/Phrasea/Command/RecordAdd.php +++ b/lib/Alchemy/Phrasea/Command/RecordAdd.php @@ -22,8 +22,7 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** - * Rescan Technical Datas command : Rescan all records of all databases and - * rescan technical datas. + * Create a record command * * @license http://opensource.org/licenses/gpl-3.0 GPLv3 * @link www.phraseanet.com diff --git a/lib/classes/collection.class.php b/lib/classes/collection.class.php index eeb4605cd1..122f5cc17e 100644 --- a/lib/classes/collection.class.php +++ b/lib/classes/collection.class.php @@ -132,7 +132,7 @@ class collection implements cache_cacheableInterface { $sql = 'UPDATE bas SET active=0 WHERE base_id = :base_id'; $stmt = $appbox->get_connection()->prepare($sql); - $stmt->execute(array(':base_id' => $this->get_base_id())); + $stmt->execute(array(':base_id' => $this->get_base_id())); $stmt->closeCursor(); $this->is_active = false; $this->delete_data_from_cache(); @@ -487,7 +487,7 @@ class collection implements cache_cacheableInterface return $this; } - public static function create(databox $databox, appbox $appbox, $name, user_adapter $user) + public static function create(databox $databox, appbox $appbox, $name, User_Adapter $user = null) { $sbas_id = $databox->get_sbas_id(); $connbas = $databox->get_connection(); @@ -533,9 +533,11 @@ class collection implements cache_cacheableInterface cache_databox::update($sbas_id, 'structure'); phrasea::reset_baseDatas(); - self::set_admin($new_bas, $user); - $appbox->get_session()->renew_phrasea_session(); + if (null !== $user) { + self::set_admin($new_bas, $user); + $appbox->get_session()->renew_phrasea_session(); + } return self::get_from_coll_id($databox, $new_id); }