dirroot.'/mod/data/lib.php'); class data_field_file extends data_field_base {// extends function data_field_file($fid=0){ parent::data_field_base($fid); } /* the content field is store as this * content = a ## b where a is the filename, * b is the display file name */ var $type = 'file'; var $id; function insert_field($dataid, $type='file', $name, $des){ $newfield = new object; $newfield->dataid = $dataid; $newfield->type = $type; $newfield->name = $name; $newfield->description = $des; if (!insert_record('data_fields',$newfield)){ notify('Insertion of new field failed!'); } } function display_add_field($id, $rid=0){ global $CFG, $course; if (!$field = get_record('data_fields','id',$id)){ notify("that is not a valid field id!"); exit; } if ($rid){ $datacontent = get_record('data_content','fieldid',$id,'recordid',$rid); if (isset($datacontent->content)){ $content = $datacontent->content; $contents[0] = $datacontent->content; $contents[1] = $datacontent->content1; }else { $contents = array(); $contents[0]=''; $contents[1]=''; } $src = empty($contents[0])? '':$contents[0]; $name = empty($contents[1])? $src:$contents[1]; $displayname = empty($contents[1])? '':$contents[1]; if ($CFG->slasharguments) { $source = $CFG->wwwroot.'/file.php/'.$course->id.'/'.$CFG->moddata.'/data/'.$field->dataid.'/'.$field->id.'/'.$rid; } else { $source = $CFG->wwwroot.'/file.php?file=/'.$course->id.'/'.$CFG->moddata.'/data/'.$field->dataid.'/'.$field->id.'/'.$rid; } } else { $displayname = ''; $name = ''; $src = ''; $source = ''; } $str = ''; if ($field->description){ $str .= ''.$field->description.' '; } $str .= ''; $str .= get_string('file','data'). ':
'; $str .= get_string('optionalfilename','data').':
'; $str .= ''; //print icon if ($rid and isset($content)){ require_once($CFG->libdir.'/filelib.php'); $icon = mimeinfo('icon', $src); $str .= ''.$icon.' '. ''.$name.''; } return $str; } function display_edit_field($id, $mode=0){ parent::display_edit_field($id, $mode); } function display_browse_field($fieldid, $recordid, $template) { global $CFG, $USER, $course; $field = get_record('data_fields', 'id', $fieldid); if ($content = get_record('data_content', 'fieldid', $fieldid, 'recordid', $recordid)){ $contents[0] = $content->content; $contents[1] = $content->content1; $src = empty($contents[0])? '':$contents[0]; $name = empty($contents[1])? $src:$contents[1]; if ($CFG->slasharguments) { $source = $CFG->wwwroot.'/file.php/'.$course->id.'/'.$CFG->moddata.'/data/'.$field->dataid.'/'.$field->id.'/'.$recordid; } else { $source = $CFG->wwwroot.'/file.php?file=/'.$course->id.'/'.$CFG->moddata.'/data/'.$field->dataid.'/'.$field->id.'/'.$recordid; } $width = $field->param1 ? ' width = "'.$field->param1.'" ':' '; $height = $field->param2 ? ' height = "'.$field->param2.'" ':' '; require_once($CFG->libdir.'/filelib.php'); $icon = mimeinfo('icon', $src); $str = ''.$icon.' '. ''.$name.''; return $str; } return false; } function update($fieldobject){ if (!update_record('data_fields',$fieldobject)){ notify ('upate failed'); } } function store_data_content($fieldid, $recordid, $value, $name=''){ global $CFG, $course; $content = new object; $content->fieldid = $fieldid; $content->recordid = $recordid; $field = get_record('data_fields','id',$fieldid); $names = explode('_',$name); switch ($names[2]){ case 0: //file just uploaded $filename = $_FILES[$names[0].'_'.$names[1]]; $filename = $filename['name']; $dir = $course->id.'/'.$CFG->moddata.'/data/'.$field->dataid.'/'.$field->id.'/'.$recordid; /************ FILE MANAGER HERE ***************/ require_once('../../lib/uploadlib.php'); $um = new upload_manager($names[0].'_'.$names[1],true,false,$course,false,$field->param3); if ($um->process_file_uploads($dir)) { //write to content $newfile_name = $um->get_new_filename(); $content->content = $newfile_name; insert_record('data_content',$content); } break; case 1: //only changing alt tag if ($oldcontent = get_record('data_content','fieldid', $fieldid, 'recordid', $recordid)){ $content->id = $oldcontent ->id; $content->content1 = clean_param($value, PARAM_NOTAGS); update_record('data_content',$content); } break; default: break; } //close switch } function update_data_content($fieldid, $recordid, $value, $name){ //if data_content already exit, we update global $CFG,$course; if ($oldcontent = get_record('data_content','fieldid', $fieldid, 'recordid', $recordid)){ $content = new object; $content->fieldid = $fieldid; $content->recordid = $recordid; $content->id = $oldcontent->id; $names = explode('_',$name); $field = get_record('data_fields','id',$fieldid); switch ($names[2]){ case 0: //file just uploaded $filename = $_FILES[$names[0].'_'.$names[1]]; $filename = $filename['name']; $dir = $course->id.'/'.$CFG->moddata.'/data/'.$field->dataid.'/'.$field->id.'/'.$recordid; //only use the manager if file is present, to avoid "are you sure you selected a file to upload" msg if ($filename){ /************ FILE MANAGER HERE ***************/ require_once('../../lib/uploadlib.php'); $um = new upload_manager($names[0].'_'.$names[1],true,false,$course,false,$field->param3); if ($um->process_file_uploads($dir)) { //write to content $newfile_name = $um->get_new_filename(); $content->content = $newfile_name; $content->content1 = $oldcontent->content1; update_record('data_content',$content); } } break; case 1: //only changing alt tag $content->content = $oldcontent->content; $content->content1 = clean_param($value, PARAM_NOTAGS); update_record('data_content', $content); break; default: break; } //close switch } else { //make 1 if there isn't one already $this->store_data_content($fieldid, $recordid, $value, $name); } } function notemptyfield($value, $name){ $names = explode('_',$name); if ($names[2] == '0'){ $filename = $_FILES[$names[0].'_'.$names[1]]; return !empty($filename['name']); //if there's a file in $_FILES, not empty } return false; } function delete_data_contents() { // Delete the content files first. $sql = 'SELECT dc.content AS content, '. 'df.dataid AS dataid, '. 'dc.recordid AS recordid '. 'FROM data_fields AS df, '. 'data_content AS dc '. "WHERE df.id = {$this->id} ". "AND dc.fieldid = {$this->id}"; if (!$results = recordset_to_array(get_recordset_sql($sql))) { return false; } foreach ($results as $result) { $this->delete_data_content_files($result->dataid, $result->recordid, $result->content); } // Then delete the data_content records. return delete_records('data_content', 'fieldid', $this->id); } function delete_data_content_files($dataid, $recordid, $content){ global $CFG, $course; $filepath = $CFG->dataroot.'/'.$course->id.'/'.$CFG->moddata.'/data/'.$dataid.'/'.$this->id.'/'.$recordid; unlink($filepath . '/' . $content); rmdir($filepath); notify ($content.' deleted'); } } ?>