diff options
Diffstat (limited to 'modules/organize/controllers')
| -rw-r--r-- | modules/organize/controllers/organize.php | 127 | 
1 files changed, 54 insertions, 73 deletions
| diff --git a/modules/organize/controllers/organize.php b/modules/organize/controllers/organize.php index 10b109f6..f25a41ca 100644 --- a/modules/organize/controllers/organize.php +++ b/modules/organize/controllers/organize.php @@ -18,40 +18,35 @@   * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA  02110-1301, USA.   */  class Organize_Controller extends Controller { -  function dialog($item_id) { -    $item = ORM::factory("item", $item_id); -    $root = $item->id == 1 ? $item : ORM::factory("item", 1); -    access::required("view", $item); -    access::required("edit", $item); +  function dialog($album_id) { +    $album = ORM::factory("item", $album_id); +    access::required("view", $album); +    access::required("edit", $album);      $v = new View("organize_dialog.html"); -    $v->album = $item; -    $parents = array(); -    foreach ($item->parents() as $parent) { -      $parents[$parent->id] = 1; -    } -    $parents[$item->id] = 1; - -    $v->album_tree = self::_tree($root, $parents); -    $v->micro_thumb_grid = self::_get_micro_thumb_grid($item, 0); +    $v->album = $album; +    $v->album_tree = self::_tree($album); +    $v->micro_thumb_grid = self::_get_micro_thumb_grid($album, 0);      print $v;    } -  function content($item_id, $offset) { -    $item = ORM::factory("item", $item_id); -    access::required("view", $item); -    access::required("edit", $item); -    print self::_get_micro_thumb_grid($item, $offset); +  function album($album_id, $offset) { +    $album = ORM::factory("item", $album_id); +    access::required("view", $album); +    access::required("edit", $album); + +    print json_encode( +      array("grid" => self::_get_micro_thumb_grid($album, $offset)->__toString(), +            "sort_column" => $album->sort_column, +            "sort_order" => $album->sort_order));    } -  function move($target_id) { +  function move_to($album_id) {      access::verify_csrf();      $task_def = Task_Definition::factory() -      ->callback("Organize_Controller::move_task_handler") -      ->description(t("Move images")) -      ->name(t("Move Images")); -    $task = task::create($task_def, array("target_id" => $target_id, +      ->callback("Organize_Controller::move_task_handler"); +    $task = task::create($task_def, array("album_id" => $album_id,                                            "source_ids" => $this->input->post("source_ids")));      print json_encode( @@ -62,20 +57,19 @@ class Organize_Controller extends Controller {    function rearrange($target_id, $before_or_after) {      access::verify_csrf(); +      $target = ORM::factory("item", $target_id);      $parent = $target->parent();      access::required("view", $parent);      access::required("edit", $parent);      $task_def = Task_Definition::factory() -      ->callback("Organize_Controller::rearrange_task_handler") -      ->description(t("Rearrange Image")) -      ->name(t("Rearrange Images")); +      ->callback("Organize_Controller::rearrange_task_handler");      $task = task::create(        $task_def,        array("target_id" => $target_id, +            "album_id" => $parent->id,              "before_or_after" => $before_or_after, -            "parent_id" => $parent->id,              "source_ids" => $this->input->post("source_ids")));      print json_encode( @@ -84,10 +78,10 @@ class Organize_Controller extends Controller {              "url" => url::site("organize/run/$task->id?csrf=" . access::csrf_token())));    } -  function resort($target_id, $col, $dir) { +  function sort_order($album_id, $col, $dir) {      access::verify_csrf(); -    $album = ORM::factory("item", $target_id); +    $album = ORM::factory("item", $album_id);      access::required("view", $album);      access::required("edit", $album); @@ -100,12 +94,15 @@ class Organize_Controller extends Controller {      $album->sort_order = $dir;      $album->save(); -    print self::_get_micro_thumb_grid($album, 0); +    print json_encode( +      array("grid" => self::_get_micro_thumb_grid($album, 0)->__toString(), +            "sort_column" => $album->sort_column, +            "sort_order" => $album->sort_order));    } -  private static function _get_micro_thumb_grid($item, $offset) { +  private static function _get_micro_thumb_grid($album, $offset) {      $v = new View("organize_thumb_grid.html"); -    $v->item = $item; +    $v->album = $album;      $v->offset = $offset;      return $v;    } @@ -124,33 +121,23 @@ class Organize_Controller extends Controller {      $task = task::run($task_id);      $results = array("done" => $task->done, "status" => $task->status,                       "percent_complete" => $task->percent_complete); -    foreach (array("tree", "content") as $data) { -      $value = $task->get($data, false); -      if ($value !== false) { -        $results[$data] = $value; -      } + +    $album = ORM::factory("item", $task->get("album_id")); +    $result = array( +      "done" => $task->done, +      "status" => $task->status, +      "percent_complete" => $task->percent_complete); +    if ($task->done) { +      $result["tree"] = self::_tree($album)->__toString(); +      $result["grid"] = self::_get_micro_thumb_grid($album, 0)->__toString();      } -    print json_encode($results); +    print json_encode($result);    } -  private static function _tree($item, $parents) { +  private static function _tree($album) {      $v = new View("organize_tree.html"); -    $v->album = $item; -    $keys = array_keys($parents); -    $v->selected = end($keys) == $item->id; -    $v->can_edit= access::can("edit", $item); -    $v->children = array(); -    $v->album_icon = "gBranchEmpty"; - -    $albums = $item->children(null, 0, array("type" => "album"), array("title" => "ASC")); -    foreach ($albums as $album) { -      if (access::can("view", $album)) { -        $v->children[] = self::_tree($album, $parents); -      } -    } -    if (count($v->children)) { -      $v->album_icon = empty($parents[$item->id]) ? "ui-icon-plus" : "ui-icon-minus"; -    } +    $v->parents = $album->parents(); +    $v->album = $album;      return $v;    } @@ -160,30 +147,25 @@ class Organize_Controller extends Controller {        batch::start();      } -    $target = ORM::factory("item", $task->get("target_id")); +    $target_album = ORM::factory("item", $task->get("album_id"));      $source_ids = $task->get("source_ids", array());      $idx = $task->get("current", 0);      $count = 0;      for (; $idx < count($source_ids) && microtime(true) - $start < 0.5; $idx++) { -      item::move(ORM::factory("item", $source_ids[$idx]), $target); +      item::move(ORM::factory("item", $source_ids[$idx]), $target_album);        $count++;      }      $task->set("current", $idx);      $task->percent_complete = (int)($idx / count($source_ids) * 100); -    $task->status = t2("Moved one file", "Moved %count files", $count);      if ($task->percent_complete == 100) {        batch::stop();        $task->done = true;        $task->state = "success";        $parents = array(); -      foreach ($target->parents() as $parent) { +      foreach ($target_album->parents() as $parent) {          $parents[$parent->id] = 1;        } -      $parents[$target->id] = 1; -      // @TODO do we want to set a flag and then generate them in the run method so we don't -      // potentially store large data items in the task? -      $task->set("tree", self::_tree(ORM::factory("item", 1), $parents)->__toString()); -      $task->set("content", self::_get_micro_thumb_grid($target, 0)->__toString()); +      $parents[$target_album->id] = 1;      }    } @@ -197,7 +179,7 @@ class Organize_Controller extends Controller {      while (microtime(true) - $start < 1.5) {        switch ($mode) {        case "init": -        $album = ORM::factory("item", $task->get("parent_id")); +        $album = ORM::factory("item", $task->get("album_id"));          if ($album->sort_column != "weight") {            $mode = "convert-to-weight-order";          } else { @@ -207,7 +189,7 @@ class Organize_Controller extends Controller {        case "convert-to-weight-order":          $i = 0; -        $album = ORM::factory("item", $task->get("parent_id")); +        $album = ORM::factory("item", $task->get("album_id"));          foreach ($album->children() as $child) {            // Do this directly in the database to avoid sending notifications            Database::Instance()->update("items", array("weight" => ++$i), array("id" => $child->id)); @@ -220,8 +202,8 @@ class Organize_Controller extends Controller {          break;        case "find-insertion-point": -        $target = ORM::factory("item", $task->get("target_id")); -        $target_weight = $target->weight; +        $album = ORM::factory("item", $task->get("album_id")); +        $target_weight = $album->weight;          if ($task->get("before_or_after") == "after") {            $target_weight++; @@ -235,11 +217,11 @@ class Organize_Controller extends Controller {          $target_weight = $task->get("target_weight");          $source_ids = $task->get("source_ids");          $count = count($source_ids); -        $parent_id = $task->get("parent_id"); +        $album_id = $task->get("album_id");          Database::Instance()->query(            "UPDATE {items} " .            "SET `weight` = `weight` + $count " . -          "WHERE `weight` >= $target_weight AND `parent_id` = {$parent_id}"); +          "WHERE `weight` >= $target_weight AND `parent_id` = {$album_id}");          $mode = "insert-source-items";          $task->percent_complete = 80; @@ -255,13 +237,12 @@ class Organize_Controller extends Controller {          break;        case "done": -        $album = ORM::factory("item", $task->get("parent_id")); +        $album = ORM::factory("item", $task->get("album_id"));          module::event("album_rearrange", $album);          batch::stop();          $task->done = true;          $task->state = "success";          $task->percent_complete = 100; -        $task->set("content", self::_get_micro_thumb_grid($album, 0)->__toString());          break;        }      } | 
