From f0486f947804a5a245ca531f23fcaffc03dbc084 Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Mon, 13 Jan 2014 16:37:21 +0100 Subject: [PATCH] Fix #1646 : Unable to mount collections --- .../Phrasea/Controller/Admin/Databox.php | 22 ++++++------- lib/classes/collection.php | 32 ++++++++++++------- templates/web/admin/databox/databox.html.twig | 4 +-- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Databox.php b/lib/Alchemy/Phrasea/Controller/Admin/Databox.php index df90ae2af2..66fa0f84a3 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Databox.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Databox.php @@ -646,21 +646,21 @@ class Databox implements ControllerProviderInterface try { $baseId = \collection::mount_collection($app, $app['phraseanet.appbox']->get_databox($databox_id), $collection_id, $app['authentication']->getUser()); - if (null == $othCollSel = $request->request->get("othcollsel")) { - $app->abort(400); - } + $othCollSel = (int) $request->request->get("othcollsel") ?: null; - $query = new \User_Query($app); - $n = 0; + if (null !== $othCollSel) { + $query = new \User_Query($app); + $n = 0; - while ($n < $query->on_base_ids(array($othCollSel))->get_total()) { - $results = $query->limit($n, 50)->execute()->get_results(); + while ($n < $query->on_base_ids(array($othCollSel))->get_total()) { + $results = $query->limit($n, 50)->execute()->get_results(); - foreach ($results as $user) { - $user->ACL()->duplicate_right_from_bas($othCollSel, $baseId); + foreach ($results as $user) { + $user->ACL()->duplicate_right_from_bas($othCollSel, $baseId); + } + + $n += 50; } - - $n += 50; } $app['phraseanet.appbox']->get_connection()->commit(); diff --git a/lib/classes/collection.php b/lib/classes/collection.php index 631f114a15..8ca6200eb1 100644 --- a/lib/classes/collection.php +++ b/lib/classes/collection.php @@ -551,6 +551,17 @@ class collection implements cache_cacheableInterface return $this; } + private static function getNewOrder(\connection_pdo $conn, $sbas_id) + { + $sql = "SELECT GREATEST(0, MAX(ord)) + 1 AS ord FROM bas WHERE sbas_id = :sbas_id"; + $stmt = $conn->prepare($sql); + $stmt->execute(array(':sbas_id' => $sbas_id)); + $ord = $stmt->fetch(\PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + return $ord['ord'] ?: 1; + } + public static function create(Application $app, databox $databox, appbox $appbox, $name, User_Adapter $user = null) { $sbas_id = $databox->get_sbas_id(); @@ -565,12 +576,6 @@ class collection implements cache_cacheableInterface '; - $sql = "SELECT GREATEST(0, MAX(ord)) + 1 AS ord FROM bas WHERE sbas_id = :sbas_id"; - $stmt = $conn->prepare($sql); - $stmt->execute(array(':sbas_id' => $sbas_id)); - $ord = $stmt->fetch(\PDO::FETCH_ASSOC); - $stmt->closeCursor(); - $sql = "INSERT INTO coll (coll_id, asciiname, prefs, logo) VALUES (null, :name, :prefs, '')"; @@ -592,7 +597,7 @@ class collection implements cache_cacheableInterface $stmt->execute(array( ':server_coll_id' => $new_id, ':sbas_id' => $sbas_id, - ':ord' => $ord['ord'] ?: 1, + ':ord' => self::getNewOrder($conn, $sbas_id), )); $stmt->closeCursor(); @@ -644,11 +649,15 @@ class collection implements cache_cacheableInterface public static function mount_collection(Application $app, databox $databox, $coll_id, User_Adapter $user) { - $sql = "INSERT INTO bas (base_id, active, server_coll_id, sbas_id, aliases) + $sql = "INSERT INTO bas (base_id, active, server_coll_id, sbas_id, aliases, ord) VALUES - (null, 1, :server_coll_id, :sbas_id, '')"; + (null, 1, :server_coll_id, :sbas_id, '', :ord)"; $stmt = $databox->get_appbox()->get_connection()->prepare($sql); - $stmt->execute(array(':server_coll_id' => $coll_id, ':sbas_id' => $databox->get_sbas_id())); + $stmt->execute(array( + ':server_coll_id' => $coll_id, + ':sbas_id' => $databox->get_sbas_id(), + ':ord' => self::getNewOrder($databox->get_appbox()->get_connection(), $databox->get_sbas_id()), + )); $stmt->closeCursor(); $new_bas = $databox->get_appbox()->get_connection()->lastInsertId(); @@ -660,7 +669,8 @@ class collection implements cache_cacheableInterface phrasea::reset_baseDatas($databox->get_appbox()); - self::set_admin($new_bas, $user); + $coll = self::get_from_base_id($app, $new_bas); + $coll->set_admin($new_bas, $user); return $new_bas; } diff --git a/templates/web/admin/databox/databox.html.twig b/templates/web/admin/databox/databox.html.twig index e60f4319c2..e29bd24d5a 100644 --- a/templates/web/admin/databox/databox.html.twig +++ b/templates/web/admin/databox/databox.html.twig @@ -177,11 +177,11 @@ {% for collId, name in databox.get_mountable_colls() %}
  • - {% trans "Monter" %} {{ name }} + {% trans %}Monter la collection {{ name }}{% endtrans %}
    {% if app['authentication'].getUser().ACL().get_granted_base(["canadmin"]) | length > 0 %}