Exemplo n.º 1
0
 /**
  * Mark asset(s) for copy or paste (ccp = cut-copy-paste)
  * - exit on failure
  *
  * @param int|string $folder Source folder ID or string (/Workspace/.../)
  * @param string $view Source view name (e.g. display, details)
  * @param array $items Array of items (e.g. [101,102,103])
  * @param string $target Target folder ID or string (/Workspace/.../)
  * @param string $operation cut or copy
  * @return int Source folder ID
  */
 static function asset_ccp($folder, $view, $items, $target, $operation)
 {
     if ($operation == "cut") {
         self::_require_access($folder, "write");
     } else {
         // copy
         self::_require_access($folder, "read");
     }
     self::_require_access($target, "write");
     $ccp_data = asset_ccp::cutcopy_items($folder, $view, $items, $operation);
     if ($ccp_data) {
         $result = asset_ccp::paste_items($target, $ccp_data);
         if ($result != "") {
             exit($result);
         }
     }
     return $folder;
 }
Exemplo n.º 2
0
 public static function copy($source, $folder)
 {
     if (empty($source) or empty($folder)) {
         return false;
     }
     if (!is_numeric($folder) and $pos = strpos($folder, ":")) {
         $handler = "lib_" . substr($folder, 0, $pos);
         if (method_exists($handler, "copy_folder")) {
             return call_user_func(array($handler, "copy_folder"), $folder);
         }
         return false;
     }
     db_lock_tree(true);
     $source = db_select_first("simple_sys_tree", array("id", "lft", "rgt", "ftitle", "parent"), "id=@id@", "", array("id" => $source));
     $target = db_select_first("simple_sys_tree", array("id", "lft", "rgt"), "id=@id@", "", array("id" => $folder));
     $success = false;
     if (!empty($source["lft"]) and !empty($target["lft"]) and !($source["lft"] <= $target["lft"] and $source["rgt"] >= $target["rgt"])) {
         $source_folders = db_select("simple_sys_tree", "*", "lft between @left@ and @right@", "lft asc", "", array("left" => $source["lft"], "right" => $source["rgt"]));
         $parent_mapping = array($source["parent"] => $target["id"]);
         foreach ($source_folders as $source_folder) {
             $data = array("noduplicate" => true, "nolock" => true, "mountpoint" => $source_folder["fmountpoint"], "rights" => array_intersect_key($source_folder, self::$rights));
             if (!isset($parent_mapping[$source_folder["parent"]])) {
                 continue;
             }
             $step = 1;
             $parent = "";
             $val = $source_folder["ftitle"];
             while ($step < 100 and empty($parent)) {
                 $step++;
                 if ($parent_mapping[$source_folder["parent"]] == $folder) {
                     $first = true;
                 } else {
                     $first = false;
                 }
                 $parent = self::create($val, $source_folder["ftype"], $source_folder["fdescription"], $parent_mapping[$source_folder["parent"]], $first, $data);
                 $val = $source_folder["ftitle"] . "_" . $step;
             }
             if (!empty($parent)) {
                 $parent_mapping[$source_folder["id"]] = $parent;
             }
         }
         foreach ($source_folders as $source_folder) {
             if (!isset($parent_mapping[$source_folder["id"]])) {
                 continue;
             }
             $ccp_data = asset_ccp::cutcopy_items($source_folder["id"], "display", array(), "copy");
             if ($ccp_data) {
                 asset_ccp::paste_items($parent_mapping[$source_folder["id"]], $ccp_data);
             }
         }
         db_update_subfolder_count($target["id"]);
         $success = true;
     }
     db_lock_tree(false);
     return $success;
 }