Permalink
Browse files

MDL-31863 added modified_since value in parameters and timemodified i…

…n return value
  • Loading branch information...
1 parent a96cbb5 commit 01c580ab050f7931b77b190865047b8e6650bdb4 @doraemonyoung doraemonyoung committed Apr 12, 2012
Showing with 392 additions and 0 deletions.
  1. +392 −0 files/externallib.php
View
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
<?php
// This file is part of Moodle - http://moodle.org/
@@ -373,3 +374,394 @@ public static function upload_returns() {
return core_files_external::upload_returns();
}
}
+=======
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * External files API
+ *
+ * @package moodlecore
+ * @subpackage webservice
+ * @copyright 2010 Dongsheng Cai <dongsheng@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once("$CFG->libdir/externallib.php");
+require_once("$CFG->libdir/filelib.php");
+
+/**
+ * Files functions
+ */
+class core_files_external extends external_api {
+
+ /**
+ * Returns description of get_files parameters
+ * @return external_function_parameters
+ */
+ public static function get_files_parameters() {
+ return new external_function_parameters(
+ array(
+ 'contextid' => new external_value(PARAM_INT, 'context id'),
+ 'component' => new external_value(PARAM_TEXT, 'component'),
+ 'filearea' => new external_value(PARAM_TEXT, 'file area'),
+ 'itemid' => new external_value(PARAM_INT, 'associated id'),
+ 'filepath' => new external_value(PARAM_PATH, 'file path'),
+ 'filename' => new external_value(PARAM_FILE, 'file name'),
+ 'modifiedsince' => new external_value(PARAM_TEXT, 'modified since', VALUE_DEFAULT, '')
+ )
+ );
+ }
+
+ /**
+ * Return moodle files listing
+ * @param int $contextid
+ * @param int $component
+ * @param int $filearea
+ * @param int $itemid
+ * @param string $filepath
+ * @param string $filename
+ * @return array
+ */
+ public static function get_files($contextid, $component, $filearea, $itemid, $filepath, $filename, $modifiedsince) {
+ global $CFG, $USER, $OUTPUT;
+ $fileinfo = self::validate_parameters(self::get_files_parameters(), array('contextid'=>$contextid, 'component'=>$component, 'filearea'=>$filearea, 'itemid'=>$itemid, 'filepath'=>$filepath, 'filename'=>$filename, 'modifiedsince'=>$modifiedsince));
+
+ $browser = get_file_browser();
+
+ if (empty($fileinfo['contextid'])) {
+ $context = get_system_context();
+ } else {
+ $context = get_context_instance_by_id($fileinfo['contextid']);
+ }
+ if (empty($fileinfo['component'])) {
+ $fileinfo['component'] = null;
+ }
+ if (empty($fileinfo['filearea'])) {
+ $fileinfo['filearea'] = null;
+ }
+ if (empty($fileinfo['itemid'])) {
+ $fileinfo['itemid'] = null;
+ }
+ if (empty($fileinfo['filename'])) {
+ $fileinfo['filename'] = null;
+ }
+ if (empty($fileinfo['filepath'])) {
+ $fileinfo['filepath'] = null;
+ }
+ if (empty($fileinfo['modifiedsince'])) {
+ $modifiedsince = null;
+ } else {
+ $modifiedsince = intval($modifiedsince);
+ }
+
+ $return = array();
+ $return['parents'] = array();
+ $return['files'] = array();
+ if ($file = $browser->get_file_info($context, $fileinfo['component'], $fileinfo['filearea'], $fileinfo['itemid'], $fileinfo['filepath'], $fileinfo['filename'])) {
+ $level = $file->get_parent();
+ while ($level) {
+ $params = $level->get_params();
+ $params['filename'] = $level->get_visible_name();
+ array_unshift($return['parents'], $params);
+ $level = $level->get_parent();
+ }
+ $list = array();
+ $children = $file->get_children();
+ foreach ($children as $child) {
+
+ $params = $child->get_params();
+ $timemodified = intval($child->get_timemodified());
+
+ if ($child->is_directory()) {
+ if ((is_null($modifiedsince)) or ($modifiedsince <= $timemodified)){
+ $node = array(
+ 'contextid' => $params['contextid'],
+ 'component' => $params['component'],
+ 'filearea' => $params['filearea'],
+ 'itemid' => $params['itemid'],
+ 'filepath' => $params['filepath'],
+ 'filename' => $child->get_visible_name(),
+ 'url' => null,
+ 'isdir' => true,
+ 'timemodified' => $timemodified
+ );
+ $list[] = $node;
+ }
+ } else {
+ if ((is_null($modifiedsince)) or ($modifiedsince <= $timemodified)){
+ $node = array(
+ 'contextid' => $params['contextid'],
+ 'component' => $params['component'],
+ 'filearea' => $params['filearea'],
+ 'itemid' => $params['itemid'],
+ 'filepath' => $params['filepath'],
+ 'filename' => $child->get_visible_name(),
+ 'url' => $child->get_url(),
+ 'isdir' => false,
+ 'timemodified' => $timemodified
+ );
+ $list[] = $node;
+ }
+ }
+ }
+ }
+ $return['files'] = $list;
+ return $return;
+ }
+
+ /**
+ * Returns description of get_files returns
+ * @return external_multiple_structure
+ */
+ public static function get_files_returns() {
+ return new external_single_structure(
+ array(
+ 'parents' => new external_multiple_structure(
+ new external_single_structure(
+ array(
+ 'contextid' => new external_value(PARAM_INT, ''),
+ 'component' => new external_value(PARAM_COMPONENT, ''),
+ 'filearea' => new external_value(PARAM_AREA, ''),
+ 'itemid' => new external_value(PARAM_INT, ''),
+ 'filepath' => new external_value(PARAM_TEXT, ''),
+ 'filename' => new external_value(PARAM_TEXT, ''),
+ )
+ )
+ ),
+ 'files' => new external_multiple_structure(
+ new external_single_structure(
+ array(
+ 'contextid' => new external_value(PARAM_INT, ''),
+ 'component' => new external_value(PARAM_COMPONENT, ''),
+ 'filearea' => new external_value(PARAM_AREA, ''),
+ 'itemid' => new external_value(PARAM_INT, ''),
+ 'filepath' => new external_value(PARAM_TEXT, ''),
+ 'filename' => new external_value(PARAM_FILE, ''),
+ 'isdir' => new external_value(PARAM_BOOL, ''),
+ 'url' => new external_value(PARAM_TEXT, ''),
+ 'timemodified' => new external_value(PARAM_TEXT, '', VALUE_OPTIONAL),
+ )
+ )
+ )
+ )
+ );
+ }
+
+ /**
+ * Returns description of upload parameters
+ * @return external_function_parameters
+ */
+ public static function upload_parameters() {
+ return new external_function_parameters(
+ array(
+ 'contextid' => new external_value(PARAM_INT, 'context id'),
+ 'component' => new external_value(PARAM_COMPONENT, 'component'),
+ 'filearea' => new external_value(PARAM_AREA, 'file area'),
+ 'itemid' => new external_value(PARAM_INT, 'associated id'),
+ 'filepath' => new external_value(PARAM_PATH, 'file path'),
+ 'filename' => new external_value(PARAM_FILE, 'file name'),
+ 'filecontent' => new external_value(PARAM_TEXT, 'file content')
+ )
+ );
+ }
+
+ /**
+ * Uploading a file to moodle
+ *
+ * @param int $contextid
+ * @param string $component
+ * @param string $filearea
+ * @param int $itemid
+ * @param string $filepath
+ * @param string $filename
+ * @param string $filecontent
+ * @return array
+ */
+ public static function upload($contextid, $component, $filearea, $itemid, $filepath, $filename, $filecontent) {
+ global $USER, $CFG;
+
+ $fileinfo = self::validate_parameters(self::upload_parameters(), array('contextid'=>$contextid, 'component'=>$component, 'filearea'=>$filearea, 'itemid'=>$itemid, 'filepath'=>$filepath, 'filename'=>$filename, 'filecontent'=>$filecontent));
+
+ if (!isset($fileinfo['filecontent'])) {
+ throw new moodle_exception('nofile');
+ }
+ // saving file
+ $dir = make_temp_directory('wsupload');
+
+ if (empty($fileinfo['filename'])) {
+ $filename = uniqid('wsupload', true).'_'.time().'.tmp';
+ } else {
+ $filename = $fileinfo['filename'];
+ }
+
+ if (file_exists($dir.$filename)) {
+ $savedfilepath = $dir.uniqid('m').$filename;
+ } else {
+ $savedfilepath = $dir.$filename;
+ }
+
+
+ file_put_contents($savedfilepath, base64_decode($fileinfo['filecontent']));
+ unset($fileinfo['filecontent']);
+
+ if (!empty($fileinfo['filepath'])) {
+ $filepath = $fileinfo['filepath'];
+ } else {
+ $filepath = '/';
+ }
+
+ if (isset($fileinfo['itemid'])) {
+ // TODO: in user private area, itemid is always 0
+ $itemid = 0;
+ } else {
+ throw new coding_exception('itemid cannot be empty');
+ }
+
+ if (!empty($fileinfo['contextid'])) {
+ $context = get_context_instance_by_id($fileinfo['contextid']);
+ } else {
+ $context = get_system_context();
+ }
+
+ if (!($fileinfo['component'] == 'user' and $fileinfo['filearea'] == 'private')) {
+ throw new coding_exception('File can be uploaded to user private area only');
+ } else {
+ // TODO: hard-coded to use user_private area
+ $component = 'user';
+ $filearea = 'private';
+ }
+
+ $browser = get_file_browser();
+
+ // check existing file
+ if ($file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename)) {
+ throw new moodle_exception('fileexist');
+ }
+
+ // move file to filepool
+ if ($dir = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, '.')) {
+ $info = $dir->create_file_from_pathname($filename, $savedfilepath);
+ $params = $info->get_params();
+ unlink($savedfilepath);
+ return array(
+ 'contextid'=>$params['contextid'],
+ 'component'=>$params['component'],
+ 'filearea'=>$params['filearea'],
+ 'itemid'=>$params['itemid'],
+ 'filepath'=>$params['filepath'],
+ 'filename'=>$params['filename'],
+ 'url'=>$info->get_url()
+ );
+ } else {
+ throw new moodle_exception('nofile');
+ }
+ }
+
+ /**
+ * Returns description of upload returns
+ * @return external_multiple_structure
+ */
+ public static function upload_returns() {
+ return new external_single_structure(
+ array(
+ 'contextid' => new external_value(PARAM_INT, ''),
+ 'component' => new external_value(PARAM_COMPONENT, ''),
+ 'filearea' => new external_value(PARAM_AREA, ''),
+ 'itemid' => new external_value(PARAM_INT, ''),
+ 'filepath' => new external_value(PARAM_TEXT, ''),
+ 'filename' => new external_value(PARAM_FILE, ''),
+ 'url' => new external_value(PARAM_TEXT, ''),
+ )
+ );
+ }
+}
+
+/**
+ * Deprecated files functions
+ * @deprecated since Moodle 2.2 please use core_files_external instead
+ */
+class moodle_file_external extends external_api {
+
+ /**
+ * Returns description of get_files parameters
+ * @deprecated since Moodle 2.2 please use core_files_external::get_files_parameters instead
+ * @return external_function_parameters
+ */
+ public static function get_files_parameters() {
+ return core_files_external::get_files_parameters();
+ }
+
+ /**
+ * Return moodle files listing
+ * @deprecated since Moodle 2.2 please use core_files_external::get_files instead
+ * @param int $contextid
+ * @param int $component
+ * @param int $filearea
+ * @param int $itemid
+ * @param string $filepath
+ * @param string $filename
+ * @return array
+ */
+ public static function get_files($contextid, $component, $filearea, $itemid, $filepath, $filename) {
+ return core_files_external::get_files($contextid, $component, $filearea, $itemid, $filepath, $filename);
+ }
+
+ /**
+ * Returns description of get_files returns
+ * @deprecated since Moodle 2.2 please use core_files_external::get_files_returns instead
+ * @return external_multiple_structure
+ */
+ public static function get_files_returns() {
+ return core_files_external::get_files_returns();
+ }
+
+ /**
+ * Returns description of upload parameters
+ * @deprecated since Moodle 2.2 please use core_files_external::upload_parameters instead
+ * @return external_function_parameters
+ */
+ public static function upload_parameters() {
+ return core_files_external::upload_parameters();
+ }
+
+ /**
+ * Uploading a file to moodle
+ * @deprecated since Moodle 2.2 please use core_files_external::upload instead
+ * @param int $contextid
+ * @param string $component
+ * @param string $filearea
+ * @param int $itemid
+ * @param string $filepath
+ * @param string $filename
+ * @param string $filecontent
+ * @return array
+ */
+ public static function upload($contextid, $component, $filearea, $itemid, $filepath, $filename, $filecontent) {
+ return core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath, $filename, $filecontent);
+ }
+
+ /**
+ * Returns description of upload returns
+ * @deprecated since Moodle 2.2 please use core_files_external::upload_returns instead
+ * @return external_multiple_structure
+ */
+ public static function upload_returns() {
+ return core_files_external::upload_returns();
+ }
+}
+>>>>>>> cf19fe0... MDL-31863 added modified_since value in parameters and timemodified in return value

0 comments on commit 01c580a

Please sign in to comment.