. // require_once('../config.php'); require_once($CFG->libdir.'/filelib.php'); require_once('lib.php'); /// Wait as long as it takes for this script to finish set_time_limit(0); require_login(); // disable blocks in this page $PAGE->set_generaltype('form'); // general parameters $action = optional_param('action', '', PARAM_ALPHA); $client_id = optional_param('client_id', SITEID, PARAM_RAW); // client ID $itemid = optional_param('itemid', '', PARAM_INT); // parameters for repository $callback = optional_param('callback', '', PARAM_CLEANHTML); $contextid = optional_param('ctx_id', SITEID, PARAM_INT); // context ID $env = optional_param('env', 'filepicker', PARAM_ALPHA); // opened in file picker, file manager or html editor $filename = optional_param('filename', '', PARAM_FILE); $fileurl = optional_param('fileurl', '', PARAM_FILE); $thumbnail = optional_param('thumbnail', '', PARAM_RAW); $repo_id = optional_param('repo_id', 0, PARAM_INT); // repository ID $req_path = optional_param('p', '', PARAM_RAW); // the path in repository $page = optional_param('page', '', PARAM_RAW); // What page in repository? $search_text = optional_param('s', '', PARAM_CLEANHTML); // draft area $newdirname = optional_param('newdirname', '', PARAM_FILE); // path in draft area $draftpath = optional_param('draftpath', '/', PARAM_PATH); // user context $user_context = get_context_instance(CONTEXT_USER, $USER->id); $PAGE->set_url('/repository/filepicker.php'); // init repository plugin // $sql = 'SELECT i.name, i.typeid, r.type FROM {repository} r, {repository_instances} i '. 'WHERE i.id=? AND i.typeid=r.id'; if ($repository = $DB->get_record_sql($sql, array($repo_id))) { $type = $repository->type; if (file_exists($CFG->dirroot.'/repository/'.$type.'/repository.class.php')) { require_once($CFG->dirroot.'/repository/'.$type.'/repository.class.php'); $classname = 'repository_' . $type; try { $repo = new $classname($repo_id, $contextid, array('ajax'=>false, 'name'=>$repository->name)); } catch (repository_exception $e){ print_error('pluginerror', 'repository'); } } else { print_error('invalidplugin', 'repository'); } } $url = new moodle_url($CFG->httpswwwroot."/repository/filepicker.php", array('ctx_id' => $contextid, 'itemid' => $itemid)); $home_url = new moodle_url($url, array('action' => 'embedded')); switch ($action) { case 'upload': // The uploaded file has been processed in plugin construct function // redirect to default page redirect($url, get_string('uploadsucc','repository')); break; case 'deletedraft': $contextid = $user_context->id; $fs = get_file_storage(); if ($file = $fs->get_file($contextid, 'user_draft', $itemid, $draftpath, $filename)) { if($result = $file->delete()) { header('Location: ' . $home_url->out(false, array(), false)); } else { print_error('cannotdelete', 'repository'); } } break; case 'search': echo '
'.get_string('back', 'repository')."
"; try { $search_result = $repo->search($search_text); $search_result['search_result'] = true; $search_result['repo_id'] = $repo_id; // TODO: need a better solution $pagingbar = new moodle_paging_bar(); $pagingbar->totalcount = $search_result['total']; $pagingbar->page = $search_result['page'] - 1; $pagingbar->perpage = $search_result['perpage']; $pagingbar->baseurl = clone($url); $pagingbar->baseurl->params(array('search_paging' => 1, 'action' => 'search', 'repo_id' => $repo_id)); $pagingbar->pagevar = 'p'; echo $OUTPUT->paging_bar($pagingbar); echo ''; foreach ($search_result['list'] as $item) { echo ''; echo ''; echo ''; echo ''; } echo '
'; echo ''; if (!empty($item['url'])) { echo ''.$item['title'].''; } else { echo $item['title']; } echo ''; echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
'; echo '
'; } catch (repository_exception $e) { } break; case 'list': case 'sign': print_header(); echo '
'.get_string('back', 'repository')."
"; if ($repo->check_login()) { $list = $repo->get_listing($req_path, $page); $dynload = !empty($list['dynload'])?true:false; if (!empty($list['upload'])) { echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; } else { if (!empty($list['path'])) { foreach ($list['path'] as $p) { echo '
'; echo '
'; echo ''; echo '
'; echo ' / '; } } if (!empty($list['page'])) { // TODO: need a better solution $pagingurl = new moodle_url("$CFG->httpswwwroot/repository/filepicker.php?action=list&itemid=$itemid&ctx_id=$contextid&repo_id=$repo_id"); echo $OUTPUT->paging_bar(moodle_paging_bar::make($list['total'], $list['page'] - 1, $list['perpage'], $pagingurl)); } echo ''; foreach ($list['list'] as $item) { echo ''; echo ''; echo ''; echo ''; } echo '
'; echo ''; if (!empty($item['url'])) { echo ''.$item['title'].''; } else { echo $item['title']; } echo ''; if (!isset($item['children'])) { echo '
'; echo ''; echo ''; echo '
'; echo ''; echo ''; echo ''; echo '
'; } else { echo '
'; echo ''; echo ''; echo '
'; } echo '
'; } } else { echo '
'; echo ''; echo ''; $repo->print_login(); echo '
'; } echo $OUTPUT->footer(); break; case 'download': $filepath = $repo->get_file($fileurl, $filename, $itemid); if (!empty($filepath)) { $info = repository::move_to_filepool($filepath, $filename, $itemid, $draftpath); redirect($url, get_string('downloadsucc','repository')); } else { print_error('cannotdownload', 'repository'); } break; case 'confirm': print_header(); echo '
'.get_string('back', 'repository').'
'; echo ''; echo '
'; echo ''; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo '
'; echo '
'; // the save path echo ' '; echo ' '; echo '
'; echo '
'; echo $OUTPUT->footer(); break; case 'plugins': $user_context = get_context_instance(CONTEXT_USER, $USER->id); $repos = repository::get_instances(array($user_context, get_system_context()), null, true, null, '*', 'ref_id'); print_header(); echo '
'.get_string('back', 'repository')."
"; echo '
'; echo ''; echo '
'; echo $OUTPUT->footer(); break; case 'mkdir': $fs = get_file_storage(); $fs->create_directory($user_context->id, 'user_draft', $itemid, trim_path(trim_path($draftpath).$newdirname)); $url->param('action', 'browse'); $url->param('draftpath', $draftpath); redirect($url, get_string('Created folder success!','repository')); break; case 'zip': $zipper = new zip_packer(); $fs = get_file_storage(); $file = $fs->get_file($user_context->id, 'user_draft', $itemid, $draftpath, '.'); if (!$file->get_parent_directory()) { $parent_path = '/'; } else { $parent_path = $file->get_parent_directory()->get_filepath(); } $newfile = $zipper->archive_to_storage(array($file), $user_context->id, 'user_draft', $itemid, $parent_path, $file->get_filepath().'.zip', $USER->id); $url->param('action', 'browse'); $url->param('draftpath', $parent_path); redirect($url, get_string('ziped','repository')); break; case 'unzip': $zipper = new zip_packer(); $fs = get_file_storage(); $file = $fs->get_file($user_context->id, 'user_draft', $itemid, $draftpath, $filename); if ($newfile = $file->extract_to_storage($zipper, $user_context->id, 'user_draft', $itemid, $draftpath, $USER->id)) { $str = get_string('unziped','repository'); } else { $str = get_string('cannotunzip', 'repository'); } $url->param('action', 'browse'); $url->param('draftpath', $draftpath); redirect($url, $str); break; case 'browse': default: $user_context = get_context_instance(CONTEXT_USER, $USER->id); $repos = repository::get_instances(array($user_context, get_system_context()), null, true, null, '*', 'ref_id'); print_header(); echo '
'; $url->param('draftpath', '/'); echo ''.'Files ▶'; $trail = ''; if ($draftpath !== '/') { $path = trim_path($draftpath); $parts = explode('/', $path); foreach ($parts as $part) { if (!empty($part)) { $trail .= ('/'.$part.'/'); $data->path[] = array('name'=>$part, 'path'=>$trail); $url->param('draftpath', $trail); echo ' '.$part.' ▶ '; } } } echo '
'; $fs = get_file_storage(); $files = $fs->get_directory_files($user_context->id, 'user_draft', $itemid, $draftpath, false); $iconzip = $CFG->wwwroot . '/pix/f/zip.gif'; if (empty($files)) { echo get_string('nofilesattached', 'repository'); } else { echo ''; } $url->param('draftpath', $draftpath); $url->param('action', 'plugins'); echo '
'; echo ' '.get_string('addfile', 'repository').''; $url->param('action', 'mkdir'); echo '
'; echo ' '; echo ' '; echo '
'; echo '
'; echo $OUTPUT->footer(); break; } /** * trim filepath, and add slash to it * @param string $str * @return string path */ function trim_path($str) { return '/'.trim(trim($str), './@#$').'/'; }