MDL-23072, properly localised repository instance name
authorDongsheng Cai <unoter@gmail.com>
Tue, 27 Jul 2010 09:03:54 +0000 (09:03 +0000)
committerDongsheng Cai <unoter@gmail.com>
Tue, 27 Jul 2010 09:03:54 +0000 (09:03 +0000)
18 files changed:
admin/repository.php
lang/en/repository.php
repository/boxnet/lib.php
repository/dropbox/lib.php
repository/filesystem/lib.php
repository/flickr/lib.php
repository/flickr_public/lib.php
repository/googledocs/lang/en/repository_googledocs.php
repository/googledocs/lib.php
repository/lib.php
repository/local/lib.php
repository/merlot/lib.php
repository/recent/lib.php
repository/s3/lib.php
repository/upload/lib.php
repository/url/lib.php
repository/user/lib.php
repository/wikimedia/lib.php

index 33e8114..e0fb6dd 100644 (file)
@@ -43,11 +43,24 @@ $configstr  = get_string('manage', 'repository');
 $return = true;
 
 if (($action == 'edit') || ($action == 'new')) {
+    $pluginname = '';
     if ($action == 'edit') {
         $repositorytype = repository::get_type_by_typename($repository);
         $classname = 'repository_' . $repositorytype->get_typename();
-        $configs = call_user_func(array($classname,'get_type_option_names'));
+        $configs = call_user_func(array($classname, 'get_type_option_names'));
         $plugin = $repositorytype->get_typename();
+        // looking for instance to edit plugin name
+        $instanceoptions = $classname::get_instance_option_names();
+        if (empty($instanceoptions)) {
+            $params = array();
+            $params['type'] = $plugin;
+            $instances = repository::get_instances($params);
+            if ($instance = array_pop($instances)) {
+                // use the one form db record
+                $pluginname = $instance->instance->name;
+            }
+        }
+
     } else {
         $repositorytype = null;
         $plugin = $repository;
@@ -55,7 +68,7 @@ if (($action == 'edit') || ($action == 'new')) {
     }
     $PAGE->set_pagetype('admin-repository-' . $plugin);
     // display the edit form for this instance
-    $mform = new repository_type_form('', array('plugin' => $plugin, 'instance' => $repositorytype, 'action' => $formaction));
+    $mform = new repository_type_form('', array('pluginname'=>$pluginname, 'plugin' => $plugin, 'instance' => $repositorytype, 'action' => $formaction));
     $fromform = $mform->get_data();
 
     //detect if we create a new type without config (in this case if don't want to display a setting page during creation)
@@ -129,7 +142,7 @@ if (($action == 'edit') || ($action == 'new')) {
         $return = false;
 
         // Display instances list and creation form
-        if ($action == 'edit'){
+        if ($action == 'edit') {
            $instanceoptionnames = repository::static_function($repository, 'get_instance_option_names');
            if (!empty($instanceoptionnames)) {
                repository::display_instances_list(get_context_instance(CONTEXT_SYSTEM), $repository);
index 7db2d8c..8c7e81e 100644 (file)
@@ -32,6 +32,8 @@ $string['addplugin'] = 'Add a repository plugin';
 $string['allowexternallinks'] = 'Allow external links';
 $string['areamainfile'] = 'Main file';
 $string['coursebackup'] = 'Course backups';
+$string['pluginname'] = 'Repository plugin name';
+$string['pluginnamehelp'] = 'You can leave it as empty, moodle will use the default name from language file.';
 $string['sectionbackup'] = 'Section backups';
 $string['activitybackup'] = 'Activity backup';
 $string['areacategoryintro'] = 'Category introduction';
index c1d01ae..9c4b307 100755 (executable)
@@ -244,7 +244,7 @@ class repository_boxnet extends repository {
      * @return array
      */
     public static function get_type_option_names() {
-        return array('api_key');
+        return array('api_key', 'pluginname');
     }
 
     /**
@@ -252,6 +252,7 @@ class repository_boxnet extends repository {
      * @param object $mform
      */
     public function type_config_form($mform) {
+        parent::type_config_form($mform);
         $public_account = get_config('boxnet', 'public_account');
         $api_key = get_config('boxnet', 'api_key');
         if (empty($api_key)) {
index 480150b..c0b0892 100644 (file)
@@ -247,6 +247,7 @@ class repository_dropbox extends repository {
      */
     public function type_config_form($mform) {
         global $CFG;
+        parent::type_config_form($mform);
         $key    = get_config('dropbox', 'dropbox_key');
         $secret = get_config('dropbox', 'dropbox_secret');
 
@@ -273,7 +274,7 @@ class repository_dropbox extends repository {
      * @return array
      */
     public static function get_type_option_names() {
-        return array('dropbox_key', 'dropbox_secret');
+        return array('dropbox_key', 'dropbox_secret', 'pluginname');
     }
 
     /**
index 6277306..2c9a685 100644 (file)
@@ -139,11 +139,6 @@ class repository_filesystem extends repository {
         return array('fs_path');
     }
 
-    public static function get_type_option_names() {
-        return array();
-    }
-    public function type_config_form($mform) {
-    }
     public function set_option($options = array()) {
         $options['fs_path'] = clean_param($options['fs_path'], PARAM_PATH);
         $ret = parent::set_option($options);
index 3f33380..13ffaa8 100755 (executable)
@@ -315,7 +315,7 @@ class repository_flickr extends repository {
      * @return array
      */
     public static function get_type_option_names() {
-        return array('api_key', 'secret');
+        return array('api_key', 'secret', 'pluginname');
     }
     public function supported_filetypes() {
         return array('web_image');
index bbc0e4c..4e862a9 100644 (file)
@@ -472,7 +472,7 @@ class repository_flickr_public extends repository {
      * @return array
      */
     public static function get_type_option_names() {
-        return array('api_key');
+        return array('api_key', 'pluginname');
     }
 
     /**
@@ -481,7 +481,7 @@ class repository_flickr_public extends repository {
     public static function plugin_init() {
         //here we create a default instance for this type
 
-        $id = repository::static_function('flickr_public','create', 'flickr_public', 0, get_system_context(), array('name' => get_string('pluginname', 'repository_flickr_public'),'email_address' => null), 1);
+        $id = repository::static_function('flickr_public','create', 'flickr_public', 0, get_system_context(), array('name'=>'', 'email_address' => null), 0);
         if (empty($id)) {
             return false;
         } else {
index c24e4c0..38f1436 100644 (file)
@@ -25,3 +25,4 @@
 
 $string['googledocs:view'] = 'View google docs repository';
 $string['pluginname'] = 'Google Docs';
+$string['configplugin'] = 'Configurate Google Docs plugin';
index 3d7487a..af5da7e 100644 (file)
@@ -108,10 +108,6 @@ class repository_googledocs extends repository {
         return parent::logout();
     }
 
-    public function get_name() {
-        return get_string('pluginname', 'repository_googledocs');
-    }
-
     public function get_file($url, $file) {
         global $CFG;
         $path = $this->prepare_file($file);
index 377ab89..211966c 100644 (file)
@@ -133,12 +133,12 @@ class repository_type {
 
         //set options attribut
         $this->_options = array();
-        $options = repository::static_function($typename,'get_type_option_names');
+        $options = repository::static_function($typename, 'get_type_option_names');
         //check that the type can be setup
         if (!empty($options)) {
             //set the type options
             foreach ($options as $config) {
-                if (array_key_exists($config,$typeoptions)) {
+                if (array_key_exists($config, $typeoptions)) {
                     $this->_options[$config] = $typeoptions[$config];
                 }
             }
@@ -234,13 +234,22 @@ class repository_type {
             //save the options in DB
             $this->update_options();
 
+            $instanceoptionnames = repository::static_function($this->_typename, 'get_instance_option_names');
+
             //if the plugin type has no multiple instance (e.g. has no instance option name) so it wont
             //be possible for the administrator to create a instance
             //in this case we need to create an instance
-            $instanceoptionnames = repository::static_function($this->_typename, 'get_instance_option_names');
             if (empty($instanceoptionnames)) {
                 $instanceoptions = array();
-                $instanceoptions['name'] = $this->_typename;
+                if (empty($this->_options['pluginname'])) {
+                    // when moodle trying to install some repo plugin automatically
+                    // this option will be empty, get it from language string when display
+                    $instanceoptions['name'] = '';
+                } else {
+                    // when admin trying to add a plugin manually, he will type a name
+                    // for it
+                    $instanceoptions['name'] = $this->_options['pluginname'];
+                }
                 repository::static_function($this->_typename, 'create', $this->_typename, 0, get_system_context(), $instanceoptions);
             }
             //run plugin_init function
@@ -273,12 +282,27 @@ class repository_type {
      * @return boolean
      */
     public function update_options($options = null) {
+        global $DB;
+        $classname = 'repository_' . $this->_typename;
+        $instanceoptions = repository::static_function($this->_typename, 'get_instance_option_names');
+        if (empty($instanceoptions)) {
+            // update repository instance name if this plugin type doesn't have muliti instances
+            $params = array();
+            $params['type'] = $this->_typename;
+            $instances = repository::get_instances($params);
+            $instance = array_pop($instances);
+            if ($instance) {
+                $DB->set_field('repository_instances', 'name', $options['pluginname'], array('id'=>$instance->id));
+            }
+            unset($options['pluginname']);
+        }
+
         if (!empty($options)) {
             $this->_options = $options;
         }
 
         foreach ($this->_options as $name => $value) {
-            set_config($name,$value,$this->_typename);
+            set_config($name, $value, $this->_typename);
         }
 
         return true;
@@ -454,6 +478,8 @@ abstract class repository {
     public $options;
     public $readonly;
     public $returntypes;
+    /** @var object repository instance database record */
+    public $instance;
     /**
      * 1. Initialize context and options
      * 2. Accept necessary parameters
@@ -463,12 +489,14 @@ abstract class repository {
      * @param array $options repository options
      */
     public function __construct($repositoryid, $context = SYSCONTEXTID, $options = array(), $readonly = 0) {
+        global $DB;
         $this->id = $repositoryid;
         if (is_object($context)) {
             $this->context = $context;
         } else {
             $this->context = get_context_instance_by_id($context);
         }
+        $this->instance = $DB->get_record('repository_instances', array('id'=>$this->id));
         $this->readonly = $readonly;
         $this->options = array();
 
@@ -676,7 +704,6 @@ abstract class repository {
             }
             require_once($CFG->dirroot . '/repository/'. $record->repositorytype.'/lib.php');
             $options['visible'] = $record->visible;
-            $options['name']    = $record->name;
             $options['type']    = $record->repositorytype;
             $options['typeid']  = $record->typeid;
             // tell instance what file types will be accepted by file picker
@@ -1139,18 +1166,10 @@ abstract class repository {
      */
     public function get_name() {
         global $DB;
-        // We always verify instance id from database,
-        // so we always know repository name before init
-        // a repository, so we don't enquery repository
-        // name from database again here.
-        if (isset($this->options['name'])) {
-            return $this->options['name'];
+        if ( $name = $this->instance->name ) {
+            return $name;
         } else {
-            if ( $repo = $DB->get_record('repository_instances', array('id'=>$this->id)) ) {
-                return $repo->name;
-            } else {
-                return '';
-            }
+            return get_string('pluginname', 'repository_' . $this->options['type']);
         }
     }
 
@@ -1478,11 +1497,19 @@ abstract class repository {
      * @param object $ Moodle form (passed by reference)
      */
     public function type_config_form($mform) {
+        $instnaceoptions = self::get_instance_option_names();
+        if (empty($instnaceoptions)) {
+            // this plugin has only one instance
+            // so we need to give it a name
+            // it can be empty, then moodle will look for instance name from language string
+            $mform->addElement('text', 'pluginname', get_string('pluginname', 'repository'), array('size' => '40'));
+            $mform->addElement('static', 'pluginnamehelp', '', get_string('pluginnamehelp', 'repository'));
+        }
     }
 
     /**
      * Edit/Create Instance Settings Moodle form
-     * @param object $ Moodle form (passed by reference)
+     * @param object $mform Moodle form (passed by reference)
      */
     public function instance_config_form($mform) {
     }
@@ -1493,7 +1520,7 @@ abstract class repository {
      * @return array
      */
     public static function get_type_option_names() {
-        return array();
+        return array('pluginname');
     }
 
     /**
@@ -1645,29 +1672,23 @@ final class repository_type_form extends moodleform {
             ? $this->_customdata['instance'] : null;
 
         $this->action = $this->_customdata['action'];
+        $this->pluginname = $this->_customdata['pluginname'];
         $mform =& $this->_form;
         $strrequired = get_string('required');
 
-        $mform->addElement('hidden', 'repos', ($this->instance) ? $this->instance->get_typename() : 0);
-        $mform->setType('repos', PARAM_INT);
-        $mform->addElement('hidden', 'repos', $this->plugin);
-        $mform->setType('repos', PARAM_FORMAT);
         $mform->addElement('hidden', 'action', $this->action);
         $mform->setType('action', PARAM_TEXT);
         $mform->addElement('hidden', 'repos', $this->plugin);
         $mform->setType('repos', PARAM_SAFEDIR);
 
         // let the plugin add its specific fields
-        if (!$this->instance) {
-            $result = repository::static_function($this->plugin, 'type_config_form', $mform);
-        } else {
-            $classname = 'repository_' . $this->instance->get_typename();
-            $result = call_user_func(array($classname, 'type_config_form'), $mform);
-        }
+        $classname = 'repository_' . $this->plugin;
+        require_once($CFG->dirroot . '/repository/' . $this->plugin . '/lib.php');
+        $result = call_user_func(array($classname, 'type_config_form'), $mform);
 
         //add "enable course/user instances" checkboxes if multiple instances are allowed
         $instanceoptionnames = repository::static_function($this->plugin, 'get_instance_option_names');
-        if (!empty($instanceoptionnames)){
+        if (!empty($instanceoptionnames)) {
             $mform->addElement('checkbox', 'enablecourseinstances', get_string('enablecourseinstances', 'repository'));
             $mform->addElement('checkbox', 'enableuserinstances', get_string('enableuserinstances', 'repository'));
         }
@@ -1689,6 +1710,10 @@ final class repository_type_form extends moodleform {
                     $data[$config] = '';
                 }
             }
+            // XXX: set plugin name for plugins which doesn't have muliti instances
+            if (empty($instanceoptionnames)){
+                $data['pluginname'] = $this->pluginname;
+            }
             $this->set_data($data);
         }
 
index a36f759..1f2f21c 100755 (executable)
@@ -153,15 +153,6 @@ class repository_local extends repository {
         return $ret;
     }
 
-    /**
-     * Set repository name
-     *
-     * @return string repository name
-     */
-    public function get_name(){
-        return get_string('pluginname', 'repository_local');;
-    }
-
     /**
      * Local file don't support to link to external links
      *
index 202061a..99490d5 100755 (executable)
@@ -124,7 +124,7 @@ class repository_merlot extends repository {
      * @return array
      */
     public static function get_type_option_names() {
-        return array('licensekey');
+        return array('licensekey', 'pluginname');
     }
 
     /**
@@ -133,6 +133,7 @@ class repository_merlot extends repository {
      * @param object $mform
      */
     public function type_config_form($mform) {
+        parent::type_config_form($mform);
         $licensekey = get_config('merlot', 'licensekey');
         if (empty($licensekey)) {
             $licensekey = '';
index 9f6315a..93daea2 100755 (executable)
@@ -116,21 +116,12 @@ class repository_recent extends repository {
         return $ret;
     }
 
-
-    /**
-     * Set repository name
-     *
-     * @return string repository name
-     */
-    public function get_name(){
-        return get_string('pluginname', 'repository_recent');;
-    }
-
     public static function get_type_option_names() {
-        return array('recentfilesnumber');
+        return array('recentfilesnumber', 'pluginname');
     }
 
     public function type_config_form($mform) {
+        parent::type_config_form($mform);
         $number = get_config('repository_recent', 'recentfilesnumber');
         if (empty($number)) {
             $number = DEFAULT_RECENT_FILES_NUM;
index c287dd5..2c833cc 100644 (file)
@@ -133,10 +133,11 @@ class repository_s3 extends repository {
     }
 
     public static function get_type_option_names() {
-        return array('access_key', 'secret_key');
+        return array('access_key', 'secret_key', 'pluginname');
     }
 
     public function type_config_form($mform) {
+        parent::type_config_form($mform);
         $strrequired = get_string('required');
         $mform->addElement('text', 'access_key', get_string('access_key', 'repository_s3'));
         $mform->addElement('text', 'secret_key', get_string('secret_key', 'repository_s3'));
index bccaf34..a9181f3 100755 (executable)
@@ -135,14 +135,6 @@ class repository_upload extends repository {
         return $ret;
     }
 
-    /**
-     * Define the readable name of this repository
-     * @return string
-     */
-    public function get_name(){
-        return get_string('pluginname', 'repository_upload');
-    }
-
     /**
      * supported return types
      * @return int
index 171b6cd..5e419d9 100644 (file)
@@ -155,9 +155,6 @@ EOD;
         }
     }
 
-    public function get_name(){
-        return get_string('pluginname', 'repository_url');;
-    }
     public function supported_returntypes() {
         return (FILE_INTERNAL | FILE_EXTERNAL);
     }
index f2ecd50..b4b200d 100755 (executable)
@@ -119,15 +119,6 @@ class repository_user extends repository {
         return $ret;
     }
 
-    /**
-     * Set repository name
-     *
-     * @return string repository name
-     */
-    public function get_name(){
-        return get_string('areauserpersonal', 'repository');;
-    }
-
     /**
      * User file don't support to link to external links
      *
index 79931e9..6130643 100644 (file)
@@ -78,9 +78,6 @@ class repository_wikimedia extends repository {
     public function logout() {
         return $this->print_login();
     }
-    public static function get_type_option_names() {
-        return null;
-    }
     public function supported_returntypes() {
         return (FILE_INTERNAL | FILE_EXTERNAL);
     }