Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
MDL-13766
Upload plugin added
  • Loading branch information
dongsheng committed Sep 1, 2008
1 parent e6b2b5b commit 5a3b9db
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 16 deletions.
78 changes: 67 additions & 11 deletions repository/lib.php
Expand Up @@ -606,6 +606,51 @@ function repository_move_to_filepool($path, $name, $itemid, $filearea = 'user_dr
}
}

/**
* Save file to local filesystem pool
* @param string $elname name of element
* @param int $contextid
* @param string $filearea
* @param string $filepath
* @param string $filename - use specified filename, if not specified name of uploaded file used
* @param bool $override override file if exists
* @param int $userid
* @return mixed stored_file object or false if error; may throw exception if duplicate found
*/
function repository_store_to_filepool($elname, $filearea='user_draft', $filepath='/') {
global $USER;
if (!isset($_FILES[$elname])) {
return false;
}

$filename = $_FILES[$elname]['name'];
$context = get_context_instance(CONTEXT_USER, $USER->id);
$itemid = (int)substr(hexdec(uniqid()), 0, 9)+rand(1,100);
$fs = get_file_storage();
$browser = get_file_browser();

if ($file = $fs->get_file($context->id, $filearea, $itemid, $filepath, $filename)) {
if ($override) {
$file->delete();
} else {
return false;
}
}

$file_record = new object();
$file_record->contextid = $context->id;
$file_record->filearea = $filearea;
$file_record->itemid = $itemid;
$file_record->filepath = $filepath;
$file_record->filename = $filename;
$file_record->userid = $USER->id;

$file = $fs->create_file_from_pathname($file_record, $_FILES[$elname]['tmp_name']);
$info = $browser->get_file_info($context, $file->get_filearea(), $file->get_itemid(), $file->get_filepath(), $file->get_filename());
$ret = array('url'=>$info->get_url(),'id'=>$itemid, 'file'=>$file->get_filename());
return $ret;
}

/**
* Return javascript to create file picker to browse repositories
* @global object $CFG
Expand Down Expand Up @@ -1060,30 +1105,41 @@ function _client(){
loading.id = u.id+'_loading';
parent.appendChild(loading);
YAHOO.util.Connect.setForm(aform, true, true);
var trans = YAHOO.util.Connect.asyncRequest('POST', '$CFG->wwwroot/repository/ws.php?action=upload&sesskey=$sesskey&ctx_id=$context->id&repo_id='+_client.repositoryid, _client.upload_cb);
var trans = YAHOO.util.Connect.asyncRequest('POST',
'$CFG->wwwroot/repository/ws.php?action=upload&sesskey=$sesskey&ctx_id=$context->id&repo_id='
+_client.repositoryid,
_client.upload_cb);
}
_client.upload_cb = {
upload: function(o){
var u = _client.ds.upload;
var aform = document.getElementById(u.id);
aform.reset();
var loading = document.getElementById(u.id+'_loading');
loading.innerHTML = '$strsaved';
alert('$strsaved');
//_client.req(_client.repositoryid, '', 0);
try {
var ret = YAHOO.lang.JSON.parse(o.responseText);
} catch(e) {
alert('$strinvalidjson - '+o.responseText);
}
if(ret && ret.e){
var panel = new YAHOO.util.Element('panel-$suffix');
panel.get('element').innerHTML = ret.e;
return;
}
if(ret){
alert('$strsaved');
repository_client_$suffix.end(ret);
}else{
alert('$strinvalidjson');
}
}
}
_client.uploadcontrol = function() {
var str = '';
if(_client.ds.upload){
str += '<div id="'+_client.ds.upload.id+'_div">';
str += '<form id="'+_client.ds.upload.id+'" onsubmit="return false">';
str += '<label for="'+_client.ds.upload.id+'-file">'+_client.ds.upload.name+'</label>';
str += '<input type="file" id="'+_client.ds.upload.id+'-file"/>';
str += '<label for="'+_client.ds.upload.id+'-file">'+_client.ds.upload.label+'</label>';
str += '<input type="file" id="'+_client.ds.upload.id+'-file" name="repo_upload_file" />';
str += '<p class="upload"><a href="###" onclick="return repository_client_$suffix.upload();">$strupload</a></p>';
str += '</form>';
str += '</div>';
str += '<hr />';
}
return str;
}
Expand Down
20 changes: 15 additions & 5 deletions repository/ws.php
Expand Up @@ -26,19 +26,21 @@
$ctx_id = optional_param('ctx_id', SITEID, PARAM_INT);
$userid = $USER->id;

if(!$repository = repository_get_instance($repo_id))
{
$sql = 'SELECT i.typeid, r.type FROM {repository} r, {repository_instances} i WHERE i.id='.$repo_id.' AND i.typeid=r.id';
if(!$repository = $DB->get_record_sql($sql)) {
$err = new stdclass;
$err->e = get_string('invalidrepositoryid', 'repository');
die(json_encode($err));
} else {
$type = $repository->type;
}

if(file_exists($CFG->dirroot.'/repository/'.
$repository->type.'/repository.class.php'))
$type.'/repository.class.php'))
{
require_once($CFG->dirroot.'/repository/'.
$repository->type.'/repository.class.php');
$classname = 'repository_' . $repository->type;
$type.'/repository.class.php');
$classname = 'repository_' . $type;
try{
$repo = new $classname($repo_id, $ctx_id, array('ajax'=>true));
} catch (repository_exception $e){
Expand Down Expand Up @@ -95,4 +97,12 @@
$err->e = $e->getMessage();
die(json_encode($err));
}
} elseif ($action == 'upload') {
try {
echo json_encode($repo->get_listing());
} catch (repository_exception $e){
$err = new stdclass;
$err->e = $e->getMessage();
die(json_encode($err));
}
}

0 comments on commit 5a3b9db

Please sign in to comment.