免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lsstarboy
打印 上一主题 下一主题

[教育] “在线课程管理”之Claroline使用集 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
21 [报告]
发表于 2009-05-10 17:29 |只看该作者
二十:使用“班级”发挥作用,在工具栏里添加“班级查询”工具——设想方案:

  1、需求分析:几个班同时上课的时候,在成绩统计中很不方便,因为几个班的学生都混在一起,不方便老师的查看,同时把所有的练习成绩分析都混在了一起,不能很好地反映某个班的整体水平。
  虽然老师可以在练习前把练习结果清空,但是这样会清空所有学生的练习结果,会把其他班级的学生成绩一起清空。
  2、作用:
  (1)为每个班添加一个“班级辅导员”,也就是教师。但是虽然是老师,但是对课程不一定有编辑使用的权利。
  (2)每个班相当于一个“组”的地位,有自己的聊天室、讨论区和讲义区,方便老师根据课程本身的内容进行发挥和补充。
  (3)“班级辅导员”可以查看成绩统计,了解学生的成绩情况和习题集的得分情况。(最好可以把很多次的成绩进行汇总。)
  3、角色层次:
  这样修改之后,Claroline变成了三级角色:课程管理员、课程辅导员和普通用户;组辅导员和组员;班辅导员和班成员。其中课程管理员和课程辅导员可以有多个,但是组辅导员和班辅导员只设一个。
  班级管理可以仍旧由平台管理员来管理,因为辅导员只负责教学,不负责人事。^_^
  4、需要修改的地方:
  (1)添加一个工具。
  (2)修改所有和“班级”有关的文件,特别是inc/lib/class.lib.php里关于班级添加、删除、修改等内容。
  (3)修改claro_init_local.inc.php,添加一个“班级”的SESSION,以及判断是不是“班级辅导员”的函数。
  (4)依照group,做工具的具体实施。

[ 本帖最后由 lsstarboy 于 2009-5-10 17:43 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
22 [报告]
发表于 2009-05-20 22:17 |只看该作者
二十一、Claroline1.9正式版,日历事件显示乱码:

  原因:日历用utf-8编码。

  解决方案:所有编码都用utf-8编码,这样最省事,免得有些字打不出来。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
23 [报告]
发表于 2009-05-20 22:21 |只看该作者
二十二、在经过内部端口映射的服务器中,短消息会导致域名解析错误,比如在nginx做的反向代理中会解析到"_"等泛域名的设置。

  /inc/lib/display/banner.php,第251行:

$userToolUrlList[]  = '<a href="'
                . get_path('clarolineRepositoryWeb')
                . 'messaging" target="_top">'
                . get_lang('My messages').'</a>'
                ;   


可以直接在messaging后面加上"/index.php“。

------------------------------------------------------------------------
--下面可以解决内网的访问,还不能解决wiki解析到内网IP的问题。
注:现查明是nginx的问题,由于nginx按正规规则来解析php,但是一般的配置脚本里都只写 \.php$的规则,这样将导致没有.php的访问不解析到php中,所以造成访问不正常。解决的方法是在nginx.conf里加上一个指向网站域名或路径的规则,比如:
        location ~ //claro {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /web$fastcgi_script_name;
            include        fastcgi_params;
        }

受此影响的还有wiki的主题。


-----------------------------------------------------------
wiki解析到内网IP:
wiki/lib/lib.javascript.php里有个定义,直接用HTTP_HOST,导致是内网IP。
    function document_web_path()
    {
        return "http://" . $_SERVER['HTTP_HOST'] . dirname( $_SERVER['SCRIPT_NAME'] );
    }

考虑到一般浏览器都可以解析到相对路径,还是直接用dirname的那一段吧。

[ 本帖最后由 lsstarboy 于 2009-5-21 22:13 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
24 [报告]
发表于 2009-06-19 12:24 |只看该作者
二十三、Claroline模块编写规则:

1.文件结构:

  conf/def/:配置文件,包括默认值的配置项目要求
  css/       :可选的css目录
  setup/  :数据库的安装与卸载脚本
  lang/  :语言文件,可以实现多语言模块
  manifest.xml:模块信息文件

2.manifest.xml
  以下通过“在线人数”模块的manifest.xml来说明,采用PHP的注释方法:

<module>                                                             //------模块说明开始
  <label>CLONLINE</label>                                 // --------模块的名称,是模块的唯一标识,用来区分模块名和创建目录
  <name>Who is online</name>                         // --------模块的说明,显示在模块管理等里面
  <version>0.2</version>                                   // --------模块版本
  <license>GPL</license>                                   // ---------模块所遵循的协议
  <default_dock>userBannerRight</default_dock>   // --------模块所在的位置,仅对applet类型有效,
                                                                           // --   对于tools类型和adminitrator类型无效
  <type>applet</type>                                      // --  类型,目前claroline有三种类型:tool=》显示在课程的左侧栏,
                                                                          //                     和“课程练习”“学习路径”等并列。
                            //  applet:小程序类。共有13个位置,可以在模块管理的配置里查询
                                                   //   administrator:管理类,和小程序相似,但是只有一个显示位置:平台管理里。
  <web>http://www.claroline.net/wiki/CLONLINE/</web> // ---------模块网址

  <description>                                                  // --------描述,一个关于本模块的简短说明
    This plugin allow to know who is online on the platform
  </description>

  <author>                                                       // -------- 作者信息:
     <name>Claroline team</name>
     <email>info@claroline.net</email>
     <web>http://www.claroline.net</web>
  </author>

  <requirements>                                           // -------- 系统要求:
    <claroline>
      <version>1.8</version>
    </claroline>
</requirements>
</module>

3.配置文件规则:
  还以上面的为例,但是只取其中的一部分:
$conf_def['config_code'] = 'CLONLINE';       // -------- 模块名,要和manifest.xml里定义的名称相同,也就是模块的唯一标识
$conf_def['config_file'] = 'CLONLINE.conf.php';      // -------- 配置文件名,这个文件创建到platform/conf/里
$conf_def['config_name'] = 'Who is online';           // -------- 配置说明

$conf_def['section']['main']['label']      = 'Main';    // --------- 配置的标签名,正常情况为mail即可,在配置是显示“主要配置”。
$conf_def['section']['main']['description']= '';       // --------- 配置的说明,显示在标签名下
$conf_def['section']['main']['properties'] =          // ------  配置属性,也就是配置项目,些例为一个属性,即“刷新时间”。
array ( 'clonline_refreshTime'     
       );

$conf_def['section']['display']['label']      = 'Display';  // -------- 增加了一个“显示”配置标签
$conf_def['section']['display']['description']= '';         //  -------- 说明
$conf_def['section']['display']['properties'] =             // --------  共定义了四个属性。下面的
array ( 'showUserId'
      , 'showEmail'
      , 'showStatus'
      , 'usersPerPage'
      );

// MAIN                                      // -------- 以下逐个定义上面所指的属性,第一个定义main标签里的“刷新时间”。
$conf_def_property_list['clonline_refreshTime'] =     
array ( 'label'       => 'Refresh time'                // --------- 选项名:
       , 'description' => '5 is a good value for this. (Minimum 1 minute; Maximum 60 minutes)'
                                                                      // ------ 选项说明,就是显示在选择右边的文字部分,注意这部分可以被换成其它语言,
                                                                     //语言转换在Claroline是自动的,不需要单独处理。
       , 'default'     => '5'                                 // -------- 默认值,注意整数型也要带引号,否则会出错。
       , 'unit'        => 'minutes'                        // -------- 单位:(!!没找到原型!!)
       , 'type'        => 'integer'                        // -------- 类型:有string、integer、multi、wwwpath、preg等类型,在config.lib.php里有定义
        ,'acceptedValue' => array ( 'min'=> 1  // 接受的值,最小是多少,最大是多少,如果是preg类型,还可以使用正则表达式
                                  , 'max'=> 60)      
       );
......                                                             // ---------- 下一个属性

4.lang文件
  lang文件和系统里的lang格式一样,但是不需要另建目录,如果是中文,文件名如下:
     lang_simpl_chinese.php
     英文语言可以写做:
     lang_english.php

  文件内的语法和lang里的格式相同。

5.数据库文件:
    还是上面模块,首先是install.sql
CREATE TABLE IF NOT EXISTS `__CL_MAIN__user_online` (         
  `id` int(11) NOT NULL auto_increment,                                      // -------- 定义数据库
  `user_id` int(11) NOT NULL default '0',
  `last_action` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

// __CL_MAIN表明是建立在主数据库里,而不是建立在课程里,建立在课程里前缀写作:__CL_COURSE

uninstall.sql只有一句,大家都能看懂:

DROP TABLE IF EXISTS `__CL_MAIN__user_online`;

[ 本帖最后由 lsstarboy 于 2009-6-19 21:09 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
25 [报告]
发表于 2009-06-23 00:15 |只看该作者
二十四、Claroline1.9模板分析:

  Claroline1.9版实现了模板的设计,让广大claroline爱好者终于又增加了点底气,特别是对于喜欢玩美工的用户,从今开始,Claroline不再会只是单一的界面,而是可以像phpbb和joomla!一样,由爱好者来设计各种眩目的主题和皮肤了。

  但是需要泼点冷水,如果你玩过华丽、易用的皮肤,不要对模板寄于太大的希望,它的模板只是实现了它的基本功能,并且还没有完全从php代码中脱离出来,只是提供了一个简单的方法来修改界面。

  修改Claroline的界面显示可以通过CSS样式表来完成,这是Claorline最直接的主题,Claorline很早的版本就支持这种修改,并且在1.8版中还有很多官方提供的主题,它的修改在1.9版中只是改了一下位置,改到web/css中,一个文件夹就是一个主题,可以直接复制出来修改,本人基本上是CSS陌,所以只是简单提一下,不再班门弄斧了。下面就只说一下claroline1.9中模块的规则。

1、使用的规则:

  (1)定义一个CoreTemplate类,并同时指定一个模板名称,下面是claroline首页的源代码:
      
$template = new CoreTemplate('platform_index.tpl.php');

                类CoreTemplate代表一个template的操作集合,它在inc/lib/display/phptemplate.lib.php里定义,是PhpTemplate类的一个扩展。
      扩展时只加了一个构造函数,从构造函数可以看到claroline在寻找模拟文件时的顺序:
$customTemplatePath = get_path('rootSys') . '/platform/templates/'.$template;

      
        包含platform/templates里的文件,这里是用户自定义的模板文件
$defaultTemplatePath = get_path('includePath') . '/templates/'.$template;

        
      
        包含inc/template里的文件
if ( file_exists( $customTemplatePath ) )
        {
            parent::__construct( $customTemplatePath );
        }

      
        如果存在用户自定义的模板
elseif ( file_exists( $defaultTemplatePath ) )
        {
            parent::__construct( $defaultTemplatePath );
        }

      
        如果存在系统自带的模板
else ......

        如果两者都不存在
  从上面的代码可以看出,claroline在寻找模板的时候,先到用户自定义模块目录去找,用户自定义模板要放到网站根目录 /plateform/templates 下。在系统自带的模板文件中,claroline也有一个声明说,如果用户有自定义的模块,建议放到/plateform/templates下,这样可以保证在升级时不丢失所做的修改。

  从上面的代码还可以看出,$template应该可以带目录符号,仅仅是从代码推测,还没有进行测试。

   (2)指定类的属性变量:
例如:

$my_html_cont = '<a href="http://www.sdcangyuan.com">sdcangyuan</a>' ;  
$template->assign("my_html",$my_html_cont);


  $template就是上个步骤里的那个对象实例,这个调用的是PHPTemplate类的方法,可以自定义一个属性,基本上原理和smarty差不多。
  assign变量要求第一个参数为字符型,第二个参数可以是任意类型。
  
  来看一下assign函数:

    public function assign( $name, $value )
    {
        $this->$name = $value;
    }


  assign函数很简单,只有一句,为本类添加一个变量,变量名为$name,变量值为$value,按照php的语法,这个地方的name应该是字符型的,并且不能带$,因为带了$就会被php解析为变量。

  (3)使用
  在使用的时候很可能会令很多人失望,其实从上面的assign函数也可以看出,PhpTemplate根本没有对变量进行处理,如果继续向后看,也不存在关于$name的处理语句,我认为主要有两个原因:第一,它不知道最终的$name是什么,因为是传递过来的字符串作为变量名;第二,它不知道你到底要对$name进行哪方面的操作,所以,还是不处理为好,具体的处理到模板中再说。这一点和smarty有点区别。

  由于模板类没有对变量进行处理,所以就必须在用的时候进行处理,来看一下模板中的应用:
<?php echo $this->my_html; ?>


     怎么样?还是有点php的感觉吧。因为在模板文件中,除了html代码外,基本上到处都是<?php和?>,可以看一下 plateform_index.tpl.php,初次看的时候就一个字:乱。看习惯了倒觉得还可以,但是也不如看smarty的模板舒服。
  至于用法.......不懂php还真不好办,但也有个好处,遇到循环、判断等语句时,直接写php,跟不在模块里的情况一样。
  也有坏处,只能一直echo下去......

  2、实现的功能
  个人认为,模板的设计有三个方面的作用:
  (1)使设计模板成为可能:虽然功能不是很强,代码和html也不是很好地做到分离,但毕竟向前跨出了一大步。
  (2)增加了缓冲的功能,由于在类的实现里,用了ob_start等输出缓冲函数,可以大大提高网页的速度,同时还可以为静态化输出做好了基础。
  (3)实现简单,速度也比较快,基本上就是“原装”的PHP语句,没有语法分析等步骤,应该基本上可以保证速度。

  关于模板的处理,基本上体现的Claroline开发组“以实用为主”的思想,没有采用现成的模板,而是自己简单地实现了一套(对模板系统不熟悉,或者是借用的某一套?),对于懂点php的用户来说,应该也不是很困难。

  完整的实例,读一下网站首页的index.php和plateform_index.tpl.php,基本上可以看到使用的方法。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
26 [报告]
发表于 2009-06-24 23:12 |只看该作者
二十五、导航栏

Claroline的导航栏

  Claroline左上角一大堆导航栏,用的时候可能感觉不到什么,反正挺方便,但是如果真让你说出他们的作用和名字,那恐怕也是一个小小的难题。

  本文先来确定一下他们的名字,再大体上说一下他们的作用,最后再简单探索一下他们的修改。

  1、导航栏各部分的名称

  还是看图吧:
   
  
  (1)平台标题区:
   整个网站的名称,如果设置了logo,高显示logo,如果设置了“上一级部门名称”,则在右侧显示上一级部门的图标。
   需要注意,这个区域会出现其它的小程序(applets模块),在“模块设置”里,给这个区域安排了两个位置,但是在称呼的时候稍微改了名,叫做“campusBannerLeft”(学校左侧区)和“campusBannerRight”(学校右侧区),而不叫“平台左侧区”、“平台右侧区”,也许开发者原始的意图就是把claroline当作一个网校来看待的。小程序会显示在标题的下面,并且会单独占用一行,感觉有点不爽,个人认为它应该到标题的右边去比较合适。

  (2)用户标题区:
  这个区域应该就是“正宗”的导航栏,显示了最常用的几种操作。
  同样,这个区域也有“用户信息左侧栏”(userBannerLeft)和“用户信息右侧栏”(userBannerRight),一个经典的例子,whoisonline(谁在线上)模块默认就显示在userBannerRight区域里。

  (3)课程标题区:
  这个区域显示的是课程的名称、课程代码和创始人。这个区域我感觉最别扭:首先,第一行写的是课程名称,第二行应该是一个简短的说明,本来应该是不错,但是在这区域紧密的地方,那一小行说明显得有点不舒服,它们的地位毕竟和那几行不是一个层次。把它移到课程名称后面,再用小点字体,着色再淡一些,也许更好一点。其次,第二行的第一部分,图上是“EMAIL_WEB”,这是课程代码,但是在下一行仍然有,内容有点重复,所以干脆不如就直接写:课程创始人--XXXX。
  这个也有左侧区和右侧区,当我们进入一个课程后,在右上角有一个下拉的菜单,里面是各种工具的集合,它就处在“课程标题右侧区”里。

  (4)面包屑区:
  初次看它的时候,真的愣了一阵子,不知道为什么叫做“面包屑”区,经过查询,才知道源于一个童话故事,叫“汉泽尔和格雷特尔”,当主人公被后母遗弃到森林里时,他们试图用面包屑找到回家的路。在网页上,当用户深入到网页中很多层时,可以很方便地通过它来返回到上面的任意层中,通常叫做“面包屑导航”区。同时,它还有另外一个好处:可以看到整个网站的构造。
  这个区域的内容随着用户浏览的内容不同而改变。
  另外,这个也有左侧区和右侧区,做过管理员的都知道“学生”和“课程管理员”身份的切换,那个功能就是处在“课程标题右侧区”里。


  2、作用:
  点击平台标志,可以到达网站的首页,如果存在上一级部门网站,可以点击上一级部门图标进入上一级部门的网站。

  用户标题区里是最常用的操作,是整个网站的灵魂部分,并且在除了全屏显示的内容,如“学习路径”外,都一直存在,可以在不同的地方跳转。

  课程标题区可以方便地到达课程首页,同时看到一些简单的课程信息。但在使用的过程中,我很少用它,也许和个人的操作习惯有关。

  面包屑导航区,根据它的含义,可以使用户方便地返回某一个位置,不至于在网站中“迷路”。

  3、修改:
  这四个导航区,1.9版都把它放到一起,放到一个模板文件里,在inc/templates/banner.tpl.php文件里。但是如果你要修改它的话,最好把它复制到/platform/templates目录里。尽量不修改默认的东西是一个好的习惯。
  
    

  在上面的UltraEdit32的截图中,经过语法收缩,可以清楚地看到各个标题区的位置和顺序。如果要修改,展开就可以进行修改。但是如果想完美地修改显示的内容和样式,也许要追踪到它的定义类或者函数里面修改,但对于普通的修改来说,修改这儿,再加上main.css的样式,应该是足够了。

  类定义对于一般的用户没有用,仅自己记笔记了。

[ 本帖最后由 lsstarboy 于 2009-6-24 23:13 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
27 [报告]
发表于 2009-06-26 09:53 |只看该作者
二十六:Claroline与ucenter整合:

http://wuxc.ntzx.cn/cLUC/claroline_UC.html

claroline与Ucenter整合

http://wuxc.ntzx.cn 江苏省南通中学 吴晓春

一、UC整合的基本原理: (摘自互联网,稍作修改。)

以用户登录为例介绍,其它注销,改密码,注册等均类似。

1、当用户xxx在某一应用程序的login.php,输入用户名,密码。可以login.php适当之处,调用UC_CLIENT目录下的 clint.php中的uc_user_login函数到UC_CENTER验证此用户和密码,如正确,则写入session,写入cookies,并更新应用程序会员表中的登录ip,登录时间。
2、 然后调用uc_user_synlogin通知UC_CENTER 用户xxx登录成功。
3、 UC_CENTER收到登录成功消息后,把xxx登录的消息,发给所有愿意接收(在UC_CENTER 中开启同步登录的其它应用)这个消息的其它应用程序。其实就是带参数访问一下各应用程序的api目录下的uc.php,用户感觉不到这个过程。
4、 各应用程序靠api目录的下的uc.php来接收UC_CENTER发来的消息,并对UC_CENTER言听计从,让干什么就干什么。现在,收到让xxx用户登录命令,马上执行。一般通过写本应用程序的session来实现登录,这需要掌握该应用程序的源码并修改。
5、最后所有与uc整合的程序,xxx均登录成功。用户从一个应用 跳到另一应用,同样显示登录。因为它们在后台均已登录。
6、应用程序与UC_CENTER的会话结束。

二、UC、Claroline、Uchome安装

此处以上Claroline 1.9rc5 与UCenter1.5、uchome1.5整合为例,说明整合的具体代码改写。运行环境为XAMPP for Windows 1.7.1。安装配置、及在UCenter中添加应用等不再赘述,请参见下图。请注意这几个软件统一使用UTF8或GB2312版本。











安装后的目录结构:

在Ucenter中加入应用后,该应用根目录下会有config.ini.php,可以打开仔细观察,看看有没有参数需要手工修改的。

三、代码修改

在 htdocs/claroline/下创建api、uc_client目录及相关文件,亦可从UC给的示例中或uchome目录下复制过来再修改相应文件。在api下创建uc.php文件,它的作用是接收Uenter发过来的消息,并通知claroline完成相应操作。uc_client目录下主要有 clinet.php文件,其作用把向Ucenter发送消息 。

1、从最简单的开始------退出登录

A 前台退出登录:在 htdocs/claroline/index.php的第42行插入三行。


B 后台同步退出:


Claroline接到退出通知,执行 htdocs/claroline/api/uc.php文件中第244~247行的内容,即后台登出。


2、登录:

A 前台登录:

①激活用户:ucenter已有用户账号,而claroline中没有,当前用户第一次登录Claroline,称为激活用户账号。过程是当用户在 claroline界面上输入用户名、密码后,先要能过uc_user_login($login, $password)到Ucenter中验证,若Ucenter验证通过,则认为在登录成功,并把该账号加入到claroline的数据库中完成激活。代码如下:


②通知ucetner及其它应用同步登录:修改 htdocs/claroline/claroline/auth/login.php如下


上述文件中,267行以后代码会调用 claro_redirect()函数,请在htdocs/claroline/claroline/inc/lib/claro_main.lib.php的第1507行修改如下,以便顺利跳转。


B 后台同步登录:接到ucenter通知,执行uc.php中相应代码实现登录。


3、用户注册(同时登录)与激活

A 用户注册,①修改\claroline\auth\imscription.php如下:


这里要注意,默认情况下Ucenter中Email是必填的、而Claroline是可以不填。所以,请以管理员登录到Claroline中“本平台的配置->个人资料”的界面下修改Emai在注册时为必填信息。

请把claroline/inc/lib/user.lib.php的第126行,修改为第127行如下所示:
126 //$sql = "INSERT INTO `" . $tbl['user'] . "`
127 $sql = "REPLACE INTO `" . $tbl['user'] . "`

修改这个语句的作用是确保用户的“userid”在不同的ucenter、claroline中是一样的。

此时,其它应用中如uchome中还不知道有了新用户,当这个新用户第一次登录uchome就激活。

②用户完成注册后,应该同时完成同步登录。请修改imscription.php中的第210到217行,如下。

B 激活

当用户在Ucenter中注册或uchome中注册了,在第一次登录到Claroline时激活(用户账号会加入到Claroline的用户表中)。

4、管理员添加用户

管理员添加用户,与用户注册相类似。请修改claroline\claroline\admin\adminaddnewuser.php的第77行到103行,如下

同样,其它应用通过激活来完成这个新用户的添加。



5、用户信息修改

A Claroline->Ucenter :管理员或用户自己都可修改个人信息,分别在文件claroline\claroline\admin\adminprofile.php的 167~184行及claroline\claroline\auth\profile.php的199~215行。内容相近,如下:

B Ucenter->Claroline:在Ucenter端修改用户名或密码,通知Claroline作相应修改。在uc.php中,如下:

注意,默认情况下,Ucenter系统(ucenter、uchome、discuz等)中密码是保存在Ucenter中的,登录验证仅在 ucenter中进行。修改密码后也不通知其它应用(如uchome等),如下所示,上半段是ucenter\control\admin \user.php的代码;下半段是uchome\api\uc.php的代码。

上半段修后的291行,完成了ucenter向uchome、claroline等应用传递新的密码明文。claroline就可接收并修改,而uchome忽略。

同时,Ucenter\control\user.php的第99~101行作同样修改。

6、删除用户

A Claroline->Ucenter :在Claroline删除用户,并通知Ucenter,如下修改两个文件。

B Ucenter->Claroline :仅有思路:先用代码模拟管理员登录Claroline,再用@fsockopen()函数调用 claroline/claroline/admin/adminuser.php?cmd=delete&user_id=$_uid& amp;offset=0来实现,未最后成功。代码如下:

} elseif($action == 'deleteuser') {

!API_DELETEUSER && exit(API_RETURN_FORBIDDEN);

$_uid = 1;
$_username='admin';
$_password='mzdmzd';
//模拟登录的代码,请参见uc.php的第110行。

$_uid = $get['uid'];
echo get_page_content_get("http://192.168.8.20/claroline/claroline/admin/adminuser.php?cmd=delete&user_id=“.$_uid.”&offset=0";

function get_page_content_get($url){
$url = eregi_replace('^http://', '', $url);
$temp = explode('/', $url);
$host = array_shift($temp);
$path = '/'.implode('/', $temp);
$temp = explode(':', $host);
$host = $temp[0];
$port = isset($temp[1]) ? $temp[1] : 80;
$fp = @fsockopen($host, $port, &$errno, &$errstr, 30);
if ($fp){

@fputs($fp, "GET $path HTTP/1.1\r\nHost: $host\r\nAccept: */*\r\nRefererurl\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\nConnection: Keep-Alive\r\n\r\n";
}
$Content = "";
while ($str = @fread($fp, 4096)){
$Content .= $str;
}
@fclose($fp);
return $Content;
}

exit(API_RETURN_SUCCEED);

}

好了,就完成了这些。请高手指导。

[ 本帖最后由 lsstarboy 于 2009-6-26 10:04 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
28 [报告]
发表于 2009-06-30 10:48 |只看该作者
二十七、1.9.1版中图片显示的两个BUG

表现:

1、在“课程讲义”里浏览图片时,图片导航的“上一幅图片”和“下一幅图片”被放到页面的顶端。

2、遇到某些中文的图片和路径时,会出现找不到或者是乱码的错误。

原因:

1、document.php中,相关的语句,从1658-1677行:

$out .= '<tr class="toolbar" valign="top">' . "\n";

// --------------------- display link to previous image ------------------

display_link_to_previous_image($imageList, $fileList, $current);

// --------------------- display title of current image ------------------

$out .= '<th class="' . $titleStyle . '">' ."\n"
.    $imgTitle
.    '</th>' . "\n"
;

// --------------------- display link to previous image ------------------

display_link_to_next_image($imageList, $fileList, $current);

$out .= '</tr>' . "\n"
.    '</table>' . "\n"
;

display_link_to_previous_image和display_link_to_next_image都在inc/lib /image.lib.php里定义,两个函数都直接使用echo,而不是采用return $html的形式,所以造成这两个提前显示。

解决办法:把这两个函数改为$html返回的形式,再把值赋给$out就可以了。



2、Claroline1.9.1版重新写了编码部分,为了防止某些恶意程序的侵入,把请求的url编码不再使用urlencode,而是使用base64_encode,然后在document.php里再还原文件名。

编码语句,inc/lib/image.lib.php,338行左右:
echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?docView=image&file="
. base64_encode($prevName) . "&cwd=" . $curDirPath
. $searchCmdUrl . "\">", "&lt;&lt; " . basename($prevName) . "</a>\n"
;


这句直接把“上一个图片名”用base64编码,输出到网页。

解码语句:documents.php,185行:

if ( isset($_REQUEST['file']) /*&& is_download_url_encoded($_REQUEST['file']) */ )
{
$_REQUEST['file'] = download_url_decode( $_REQUEST['file'] );
}

其中download_url_decode在inc/lib/file.lib.php406行定义:

function download_url_decode( $str )
{
if ( $GLOBALS['is_Apache'] && get_conf('usePrettyUrl', false) )
{
$str = ltrim($str, '/');
return '/' . ltrim( base64_decode( $str ), '/' );
}
else
{
return base64_decode( $str );
}
}


我用的nginx,所以直接就被用base64反编码了。

但注意有个错误:

base64编码是除了大小写、数字外,还有两个特殊字符:“+”和“\”,这两个字符不能在url中使用,只要是使用这两个字符的网址都会被换成空格。

所以,如果图片文件名的base64编码中包含了这两个字符,那么传递到document.php中的file参数就会变形,导致文件找不到。

解决办法:

在base64编码后,把“+”和“\”换成url的“%2B”和“%5C”。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
29 [报告]
发表于 2009-07-26 21:49 |只看该作者
二十八:1.9.0-1.9.1版中,在编辑器里的“插入图片”中,如果是中文的图片名或者是目录名,刚会导致乱码,原因:
1、\editor\tiny_mce\tiny_mce\plugins\claroimage\backend.php,第83行:
    header('Content-Type: text/html; charset=UTF-8'); // Charset
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past

莫名奇妙地出现了几个header,并且是用UTF-8编码,我以前一直用utf-8,所以没发现错误。用在GB2312的场合,肯定要出错,并且还有个过期时间。
   如果用GB2312编码,把“UTF-8"改为“GB2312”就行了。
2、上文最后:
echo claro_utf8_encode($out);
这一个也是指定用UTF-8,最好注释掉。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
30 [报告]
发表于 2009-07-28 18:19 |只看该作者
二十九:TinyMCE的改进(1.8版)
转自:http://www.cnblogs.com/littlebam ... /10/13/1310162.html

近来在研究开源的在线学习系统Claroline,一个非常简单和实用的一个e-learning系统。
可以很容易的创建课程讲义和课程。通过“学习路径”可以创建进度跟踪的学习方式。
其中,遇到的问题是:创建一个media为主的课程讲义的时候,插入的流媒体文件路径会被系统替换掉。

问题描述:
1、claroline中使用了JS的在线编辑器tinyMCE作为讲义的编辑工具。
2、在tinyMCE中点击“insert/edit embedded media”后打开了一个插入流媒体文件的页面,页面上有一个输入文件名的地方和一个预览的地方。
3、插入media文件的页面时tinyMCE的htm文件,在tinyMCE目录下面,而课程中的视频文件是放在各个客户目录下面的,两个目录一点关系都没有。
4、选择文件的方式非常简单,只要把文件名输入在file文本输入框中即可。
5、问题出现:
   当我保存这个讲义时,自动生成一个htm文件,这个文件中带有一个media player的播放器,找到文件就可以播放。
   但是,在我提交了选择的文件的时候,发现编辑器中的html如下:
   <object classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" width="400" height="400">
<param name="src" value="/Claroline/claroline/document/10.wmv" />
<param name="width" value="400" />
<param name="height" value="400" />
<embed type="application/x-mplayer2" src="/Claroline/claroline/document/10.wmv" width="400" height="400"></embed>
</object>

   问题出来了
   第一:参数只有<param name="src",不能播放,需要参数<param name="url"
   第二:文件路径错误,保存的路径是tinyMCE编辑器文件所在的目录,而需要的是课程的目录。


   那么解决的方法:
   第一个:在写html的时候把"src"修改为"url";
   第二个:修改那个预览和保存时候的路径,找到课程的目录;


第一个问题的解决:
1、在编辑器的目录下有一个editor_plugin.js文件,还有一个editor_plug_src.js两个文件
  文件中的内容基本一样,只是editor_plug_src.js文件中的内容很规整,但是editor_plug.js文件内容没有排版,无法读懂。
2、在两个文件中都有一个方法_getEmbed(),实在提交讲义的时候生成html文件的方法
   方法的参数P就是各个param的参数名和数值。
   在这个_getEmbed()方法中整合完整的<object>...</object>
   于是我打算在其中加入<param name='url',它的value和'src'的value一致。
3、到底修改那个js
   一开始我始终修改editor_plugin_src.js因为我觉得这个很工整,应该修改这个。
   但是同学的话给了我提示:“编辑器都有俩到三种编辑模式,每种编辑模式都会有自己的js”。
   于是我想:是不是带有_src的js是在html模式下使用的js呢?于是我对照editor_plugin_src.js在editor_plugin.js中找到修改的地方,增加url的param。
4、问题解决。
5、看来对于在线编辑器的实现还有待进一步的学习和了解阿。


第二个问题:
1、为什么保存的时候会加上编辑器所在目录的路径呢?
   依然是对tinyMCE的解读。
2、在editor.class.php中有一个tinyMCE.Init方法,设定了很多的参数
   其中有参数convert_urls 和relative_urls。这两个参数默认是false,即默认使用绝对路径。
3、修改上面两个参数为true,则修改使用相对路径
4、这个时候再增加视频文件,发现路径中的/Claroline/claroline/document/自动消失了,不会自动加入代码中。有进展。
5、那么在课程中播放是可以了,但是预览会有问题
6、读取media.htm文件,发现预览调用了media.js中的generatePreview()方法。
7、generatePreview()方法中,调用了一个转换路径的方法
   pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);
   pl.src就是制定了预览的时候视频的位置
8、其中tinyMCE.settings['base_href']不知道base_href参数不知道如何设置的,也许默认就是编辑器所在路径。
9、第三点中提到使用了相对路径后,tinyMCE可是设定一个参数document_base_url
   当我设定了这个参数后,可以用tinyMCE.settings['document_base_url'] 在js中获取设定的值
10、那么我就把课程文件的路径放入其中就可以了
11、问题又出现了,每个课程的名字是不定的,如何把课程名字传到这个路径中呢?
12、联想到进入一个课程后,在课程的各个栏目中切换,系统都会知道进入的是那个课程,那么一定有地方保存了课程的信息。
13、发现系统中有这么一个语句
    $_course = claro_get_current_course_data();
    从语句看来就是得到当前课程的数据
    用php的echo $_course发现$_course是一个array
    那么一定有一个数组值是课程名字的
14、在文件夹中查找有$_course["name"]存放了课程的名字
15、于是在editor.class.php的tinyMCE.init中设置
     $_course = claro_get_current_course_data();
     $_courseName=$_course['name'];
     document_base_url : "/Claroline/courses/"+ "'.$_courseName.'"+"/document", '."\n"
16、修改media.js中generatePreview()方法中的语句
   pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);
   为
   pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['document_base_url'], pl.src);
17、预览搞定
18、保存的时候是相对路径,那么讲义的制作也搞定了。

发现几个需要注意的问题:
1、讲义的文件名不能以数字开头
2、讲义的文件名不要写成中文
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP