| Línea 13... | Línea 13... | 
          
            | 13 | //
 | 13 | //
 | 
          
            | 14 | // You should have received a copy of the GNU General Public License
 | 14 | // You should have received a copy of the GNU General Public License
 | 
          
            | 15 | // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 | 15 | // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 | 
          
            | Línea 16... | Línea 16... | 
          
            | 16 |  
 | 16 |  
 | 
          
            | 17 | /**
 | - |   | 
          
            | 18 |  * Microsoft Live Skydrive Repository Plugin
 | - |   | 
          
            | 19 |  *
 | - |   | 
          
            | 20 |  * @package    repository_onedrive
 | - |   | 
          
            | 21 |  * @copyright  2012 Lancaster University Network Services Ltd
 | - |   | 
          
            | 22 |  * @author     Dan Poltawski <dan.poltawski@luns.net.uk>
 | - |   | 
          
            | 23 |  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | - |   | 
          
            | 24 |  */
 | - |   | 
          
            | 25 |  
 | - |   | 
          
            | 26 | defined('MOODLE_INTERNAL') || die();
 | - |   | 
          
            | 27 |  
 | - |   | 
          
            | 28 | /**
 | 17 | /**
 | 
          
            | 29 |  * Microsoft onedrive repository plugin.
 | 18 |  * Microsoft onedrive repository plugin.
 | 
          
            | 30 |  *
 | 19 |  *
 | 
          
            | 31 |  * @package    repository_onedrive
 | 20 |  * @package    repository_onedrive
 | 
          
            | 32 |  * @copyright  2012 Lancaster University Network Services Ltd
 | 21 |  * @copyright  2012 Lancaster University Network Services Ltd
 | 
          
            | Línea 451... | Línea 440... | 
          
            | 451 |             $client = $this->get_user_oauth_client();
 | 440 |             $client = $this->get_user_oauth_client();
 | 
          
            | 452 |         }
 | 441 |         }
 | 
          
            | Línea 453... | Línea 442... | 
          
            | 453 |  
 | 442 |  
 | 
          
            | Línea -... | Línea 443... | 
          
            | - |   | 443 |         $base = 'https://graph.microsoft.com/v1.0/';
 | 
          
            | 454 |         $base = 'https://graph.microsoft.com/v1.0/';
 | 444 |  
 | 
          
            | 455 |  
 | 445 |         // Fetch the item info.
 | 
          
            | - |   | 446 |         $infourl = (new moodle_url($base . 'me/drive/items/' . $sourceinfo->id))->out(false);
 | 
          
            | - |   | 447 |         $response = $client->get($infourl);
 | 
          
            | - |   | 448 |         if (!$response) {
 | 
          
            | - |   | 449 |             throw new repository_exception('cannotdownload', 'repository');
 | 
          
            | - |   | 450 |         }
 | 
          
            | Línea 456... | Línea 451... | 
          
            | 456 |         $sourceurl = new moodle_url($base . 'me/drive/items/' . $sourceinfo->id . '/content');
 | 451 |         $response = json_decode($response, true);
 | 
          
            | 457 |         $source = $sourceurl->out(false);
 | 452 |         $downloadurl = $response['@microsoft.graph.downloadUrl'];
 | 
          
            | 458 |  
 | 453 |  
 | 
          
            | - |   | 454 |         // We use download_one and not the rest API because it has special timeouts etc.
 | 
          
            | - |   | 455 |         $path = $this->prepare_file($filename);
 | 
          
            | 459 |         // We use download_one and not the rest API because it has special timeouts etc.
 | 456 |         $options = ['filepath' => $path, 'timeout' => 15, 'followlocation' => true, 'maxredirs' => 5];
 | 
          
            | Línea 460... | Línea 457... | 
          
            | 460 |         $path = $this->prepare_file($filename);
 | 457 |         // We cannot send authorization headers in the direct download request, it will fail.
 | 
          
            | 461 |         $options = ['filepath' => $path, 'timeout' => 15, 'followlocation' => true, 'maxredirs' => 5];
 | 458 |         $c = new curl();
 | 
          
            | 462 |         $result = $client->download_one($source, null, $options);
 | 459 |         $result = $c->download_one($downloadurl, null, $options);
 | 
          
            | 463 |  
 | 460 |  
 | 
          
            | Línea 559... | Línea 556... | 
          
            | 559 |      * @param int $lifetime Number of seconds before the file should expire from caches (null means $CFG->filelifetime)
 | 556 |      * @param int $lifetime Number of seconds before the file should expire from caches (null means $CFG->filelifetime)
 | 
          
            | 560 |      * @param int $filter 0 (default)=no filtering, 1=all files, 2=html files only
 | 557 |      * @param int $filter 0 (default)=no filtering, 1=all files, 2=html files only
 | 
          
            | 561 |      * @param bool $forcedownload If true (default false), forces download of file rather than view in browser/plugin
 | 558 |      * @param bool $forcedownload If true (default false), forces download of file rather than view in browser/plugin
 | 
          
            | 562 |      * @param array $options additional options affecting the file serving
 | 559 |      * @param array $options additional options affecting the file serving
 | 
          
            | 563 |      */
 | 560 |      */
 | 
          
            | 564 |     public function send_file($storedfile, $lifetime=null , $filter=0, $forcedownload=false, array $options = null) {
 | 561 |     public function send_file($storedfile, $lifetime=null , $filter=0, $forcedownload=false, ?array $options = null) {
 | 
          
            | 565 |         if ($this->disabled) {
 | 562 |         if ($this->disabled) {
 | 
          
            | 566 |             throw new repository_exception('cannotdownload', 'repository');
 | 563 |             throw new repository_exception('cannotdownload', 'repository');
 | 
          
            | 567 |         }
 | 564 |         }
 | 
          
            | Línea 568... | Línea 565... | 
          
            | 568 |  
 | 565 |  
 | 
          
            | Línea 879... | Línea 876... | 
          
            | 879 |             throw new repository_exception('errorwhilecommunicatingwith', 'repository', '', $details);
 | 876 |             throw new repository_exception('errorwhilecommunicatingwith', 'repository', '', $details);
 | 
          
            | 880 |         }
 | 877 |         }
 | 
          
            | Línea 881... | Línea 878... | 
          
            | 881 |  
 | 878 |  
 | 
          
            | Línea -... | Línea 879... | 
          
            | - |   | 879 |         $systemservice = new repository_onedrive\rest($systemauth);
 | 
          
            | - |   | 880 |  
 | 
          
            | - |   | 881 |         $base = 'https://graph.microsoft.com/v1.0/';
 | 
          
            | - |   | 882 |  
 | 
          
            | - |   | 883 |         // Fetch the item info.
 | 
          
            | - |   | 884 |         $infourl = (new moodle_url($base . 'me/drive/items/' . $source->id))->out(false);
 | 
          
            | - |   | 885 |         $response = $userauth->get($infourl);
 | 
          
            | - |   | 886 |         if (!$response) {
 | 
          
            | - |   | 887 |             throw new repository_exception('cannotdownload', 'repository');
 | 
          
            | - |   | 888 |         }
 | 
          
            | - |   | 889 |         $response = json_decode($response, true);
 | 
          
            | 882 |         $systemservice = new repository_onedrive\rest($systemauth);
 | 890 |         $downloadurl = $response['@microsoft.graph.downloadUrl'];
 | 
          
            | 883 |  
 | 891 |  
 | 
          
            | 884 |         // Download the file.
 | 892 |         // Download the file.
 | 
          
            | Línea -... | Línea 893... | 
          
            | - |   | 893 |         $tmpfilename = clean_param($source->id, PARAM_PATH);
 | 
          
            | - |   | 894 |         $temppath = make_request_directory() . $tmpfilename;
 | 
          
            | 885 |         $tmpfilename = clean_param($source->id, PARAM_PATH);
 | 895 |  
 | 
          
            | 886 |         $temppath = make_request_directory() . $tmpfilename;
 | - |   | 
          
            | 887 |  
 | - |   | 
          
            | 888 |         $options = ['filepath' => $temppath, 'timeout' => 60, 'followlocation' => true, 'maxredirs' => 5];
 | - |   | 
          
            | 889 |         $base = 'https://graph.microsoft.com/v1.0/';
 | - |   | 
          
            | 890 |         $sourceurl = new moodle_url($base . 'me/drive/items/' . $source->id . '/content');
 | 896 |         // We cannot send authorization headers in the direct download request, it will fail.
 | 
          
            | Línea 891... | Línea 897... | 
          
            | 891 |         $sourceurl = $sourceurl->out(false);
 | 897 |         $c = new curl();
 | 
          
            | 892 |  
 | 898 |         $options = ['filepath' => $temppath, 'timeout' => 60, 'followlocation' => true, 'maxredirs' => 5];
 | 
          
            | 893 |         $result = $userauth->download_one($sourceurl, null, $options);
 | 899 |         $result = $c->download_one($downloadurl, null, $options);
 | 
          
            | Línea 1008... | Línea 1014... | 
          
            | 1008 |             return $info->name;
 | 1014 |             return $info->name;
 | 
          
            | 1009 |         }
 | 1015 |         }
 | 
          
            | 1010 |     }
 | 1016 |     }
 | 
          
            | Línea 1011... | Línea 1017... | 
          
            | 1011 |  
 | 1017 |  
 | 
          
            | 1012 |     /**
 | - |   | 
          
            | 1013 |      * Return true if any instances of the skydrive repo exist - and we can import them.
 | - |   | 
          
            | 1014 |      *
 | - |   | 
          
            | 1015 |      * @return bool
 | 1018 |     /**
 | 
          
            | 1016 |      * @deprecated since Moodle 4.0
 | - |   | 
          
            | 1017 |      * @todo MDL-72620 This will be deleted in Moodle 4.4.
 | 1019 |      * @deprecated since Moodle 4.0
 | 
          
            | - |   | 1020 |      */
 | 
          
            | 1018 |      */
 | 1021 |     #[\core\attribute\deprecated(null, reason: 'It is no longer used', since: '4.0', final: true)]
 | 
          
            | 1019 |     public static function can_import_skydrive_files() {
 | - |   | 
          
            | 1020 |         global $DB;
 | - |   | 
          
            | 1021 |  
 | - |   | 
          
            | 1022 |         $skydrive = $DB->get_record('repository', ['type' => 'skydrive'], 'id', IGNORE_MISSING);
 | - |   | 
          
            | 1023 |         $onedrive = $DB->get_record('repository', ['type' => 'onedrive'], 'id', IGNORE_MISSING);
 | - |   | 
          
            | 1024 |  
 | - |   | 
          
            | 1025 |         if (empty($skydrive) || empty($onedrive)) {
 | - |   | 
          
            | 1026 |             return false;
 | - |   | 
          
            | 1027 |         }
 | - |   | 
          
            | 1028 |  
 | - |   | 
          
            | 1029 |         $ready = true;
 | - |   | 
          
            | 1030 |         try {
 | - |   | 
          
            | 1031 |             $issuer = \core\oauth2\api::get_issuer(get_config('onedrive', 'issuerid'));
 | - |   | 
          
            | 1032 |             if (!$issuer->get('enabled')) {
 | - |   | 
          
            | 1033 |                 $ready = false;
 | - |   | 
          
            | 1034 |             }
 | - |   | 
          
            | 1035 |             if (!$issuer->is_configured()) {
 | - |   | 
          
            | 1036 |                 $ready = false;
 | - |   | 
          
            | 1037 |             }
 | - |   | 
          
            | 1038 |         } catch (dml_missing_record_exception $e) {
 | - |   | 
          
            | 1039 |             $ready = false;
 | - |   | 
          
            | 1040 |         }
 | - |   | 
          
            | 1041 |         if (!$ready) {
 | - |   | 
          
            | 1042 |             return false;
 | - |   | 
          
            | 1043 |         }
 | - |   | 
          
            | 1044 |  
 | - |   | 
          
            | 1045 |         $sql = "SELECT count('x')
 | - |   | 
          
            | 1046 |                   FROM {repository_instances} i, {repository} r
 | - |   | 
          
            | 1047 |                  WHERE r.type=:plugin AND r.id=i.typeid";
 | - |   | 
          
            | 1048 |         $params = array('plugin' => 'skydrive');
 | 1022 |     public static function can_import_skydrive_files() {
 | 
          
            | 1049 |         return $DB->count_records_sql($sql, $params) > 0;
 | 1023 |         \core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
 | 
          
            | Línea 1050... | Línea 1024... | 
          
            | 1050 |     }
 | 1024 |     }
 | 
          
            | 1051 |  
 | - |   | 
          
            | 1052 |     /**
 | - |   | 
          
            | 1053 |      * Import all the files that were created with the skydrive repo to this repo.
 | - |   | 
          
            | 1054 |      *
 | 1025 |  
 | 
          
            | 1055 |      * @return bool
 | - |   | 
          
            | 1056 |      * @deprecated since Moodle 4.0
 | 1026 |     /**
 | 
          
            | - |   | 1027 |      * @deprecated since Moodle 4.0
 | 
          
            | 1057 |      * @todo MDL-72620 This will be deleted in Moodle 4.4.
 | 1028 |      */
 | 
          
            | 1058 |      */
 | - |   | 
          
            | 1059 |     public static function import_skydrive_files() {
 | - |   | 
          
            | 1060 |         global $DB;
 | - |   | 
          
            | 1061 |  
 | - |   | 
          
            | 1062 |         debugging('import_skydrive_files() is deprecated. Please migrate your files from repository_skydrive to ' .
 | - |   | 
          
            | 1063 |             'repository_onedrive before it will be completely removed.', DEBUG_DEVELOPER);
 | - |   | 
          
            | 1064 |  
 | - |   | 
          
            | 1065 |         if (!self::can_import_skydrive_files()) {
 | - |   | 
          
            | 1066 |             return false;
 | - |   | 
          
            | 1067 |         }
 | - |   | 
          
            | 1068 |         // Should only be one of each.
 | - |   | 
          
            | 1069 |         $skydrivetype = repository::get_type_by_typename('skydrive');
 | - |   | 
          
            | 1070 |  
 | - |   | 
          
            | 1071 |         $skydriveinstances = repository::get_instances(['type' => 'skydrive']);
 | - |   | 
          
            | 1072 |         $skydriveinstance = reset($skydriveinstances);
 | - |   | 
          
            | 1073 |         $onedriveinstances = repository::get_instances(['type' => 'onedrive']);
 | - |   | 
          
            | 1074 |         $onedriveinstance = reset($onedriveinstances);
 | - |   | 
          
            | 1075 |  
 | - |   | 
          
            | 1076 |         // Update all file references.
 | - |   | 
          
            | 1077 |         $DB->set_field('files_reference', 'repositoryid', $onedriveinstance->id, ['repositoryid' => $skydriveinstance->id]);
 | - |   | 
          
            | 1078 |  
 | - |   | 
          
            | 1079 |         // Delete and disable the skydrive repo.
 | - |   | 
          
            | 1080 |         $skydrivetype->delete();
 | - |   | 
          
            | 1081 |         core_plugin_manager::reset_caches();
 | - |   | 
          
            | 1082 |  
 | - |   | 
          
            | 1083 |         $sql = "SELECT count('x')
 | - |   | 
          
            | 1084 |                   FROM {repository_instances} i, {repository} r
 | - |   | 
          
            | 1085 |                  WHERE r.type=:plugin AND r.id=i.typeid";
 | 1029 |     #[\core\attribute\deprecated(null, reason: 'It is no longer used', since: '4.0', final: true)]
 | 
          
            | 1086 |         $params = array('plugin' => 'skydrive');
 | 1030 |     public static function import_skydrive_files() {
 | 
          
            | Línea 1087... | Línea 1031... | 
          
            | 1087 |         return $DB->count_records_sql($sql, $params) == 0;
 | 1031 |         \core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
 | 
          
            | 1088 |     }
 | 1032 |     }
 | 
          
            | 1089 |  
 | 1033 |  
 | 
          
            | Línea 1099... | Línea 1043... | 
          
            | 1099 |         $url = new moodle_url('/admin/tool/oauth2/issuers.php');
 | 1043 |         $url = new moodle_url('/admin/tool/oauth2/issuers.php');
 | 
          
            | 1100 |         $url = $url->out();
 | 1044 |         $url = $url->out();
 | 
          
            | Línea 1101... | Línea 1045... | 
          
            | 1101 |  
 | 1045 |  
 | 
          
            | Línea 1102... | Línea -... | 
          
            | 1102 |         $mform->addElement('static', null, '', get_string('oauth2serviceslink', 'repository_onedrive', $url));
 | - |   | 
          
            | 1103 |  
 | - |   | 
          
            | 1104 |         if (self::can_import_skydrive_files()) {
 | - |   | 
          
            | 1105 |             debugging('can_import_skydrive_files() is deprecated. Please migrate your files from repository_skydrive to ' .
 | - |   | 
          
            | 1106 |             'repository_onedrive before it will be completely removed.', DEBUG_DEVELOPER);
 | - |   | 
          
            | 1107 |  
 | - |   | 
          
            | 1108 |             $notice = get_string('skydrivefilesexist', 'repository_onedrive');
 | - |   | 
          
            | 1109 |             $url = new moodle_url('/repository/onedrive/importskydrive.php');
 | - |   | 
          
            | 1110 |             $attrs = ['class' => 'btn btn-primary'];
 | - |   | 
          
            | 1111 |             $button = $OUTPUT->action_link($url, get_string('importskydrivefiles', 'repository_onedrive'), null, $attrs);
 | - |   | 
          
            | 1112 |             $mform->addElement('static', null, '', $OUTPUT->notification($notice) . $button);
 | - |   | 
          
            | 1113 |         }
 | 1046 |         $mform->addElement('static', null, '', get_string('oauth2serviceslink', 'repository_onedrive', $url));
 | 
          
            | 1114 |  
 | 1047 |  
 | 
          
            | 1115 |         parent::type_config_form($mform);
 | 1048 |         parent::type_config_form($mform);
 | 
          
            | Línea 1116... | Línea 1049... | 
          
            | 1116 |         $options = [];
 | 1049 |         $options = [];
 |