Knowledgeroot 开源知识管理系统简要介绍

http://blog.sina.com.cn/s/blog_701dfa430101hsyt.html

Knowledgeroot  开源知识管理系统(KMS)
官方网站:Knowledgeroot.org - 当前版本: version: 1.0.3

Knowledgeroot可用于文档管理,知识库管理。

1.基于php开发,支持linux ,windows.
2.支持mysql ,sqlite, postgreSQL
3.支持任意类型附件(目前版本使用数据库base64后保存文件,需要调整mysql 参数max_allowed_packet,否则大于1M文件不能保存),使用数据库保存附件这个特性,如果附件很多,很大的情况,会是个问题。需要改造。
4.支持插件功能,官方网站下载插件,后台管理import,然后install, enable。
5.官方插件CKEditor (当前版本 2.6.2) 可与KCFinder 2.5.1 配合实现文件上传(已经支持中文)
6.官方插件ContentHistory 实现版本历史功能,类似diff查看版本,以及系统全部 last changes
7.支持中文,如需要修改原始翻译,可使用 msgfmt 可自主转换 po to mo.
8.tips:针对每个page.可以在edit page时设定content是否在点击page时自动展开还是只列title。创建时不能指定?
9.编辑冲突问题解决:原始版本编辑content时,首先在content_open表插入数据。然后打开content内容。第二个用户编辑时,也是先写入到content_open表,然后检查是否有其他用户打开数据,如果有,在打开内容上方显示警告。如果强制编辑,会出现一方修改信息被另一方覆盖的问题。
解决方法是采用排他编辑模式,如果内容被编辑中,其他人再试图编辑,直接提示有其他人编辑,返回。不能进入编辑。提示信息中有正在编辑此内容的user id。以方便协调。
主要修改2个文件:
  class-knowledgeroot-content.php
    function edit_content
class-knowledgeroot.php
    function openContent

10.注意插件多不支持中文,修改插件的language.php参照 en_US 增加zh_CN配置,(UTF-8 no bom )
11. 使用CKEditor 时,配合KCFinder支持文件上传
修改CKEditor目录下config.js  指向KCFinder
CKEDITOR.editorConfig = function( config )
{
        // Define changes to default configuration here. For example:
        // config.language = 'fr';
        // config.uiColor = '#AADC6E';

      config.filebrowserBrowseUrl = '/kcfinder/browse.php?type=files';
      config.filebrowserImageBrowseUrl = '/kcfinder/browse.php?type=images';
      config.filebrowserFlashBrowseUrl = '/kcfinder/browse.php?type=flash';
      config.filebrowserUploadUrl = '/kcfinder/upload.php?type=files';
      config.filebrowserImageUploadUrl = '/kcfinder/upload.php?type=images';
      config.filebrowserFlashUploadUrl = '/kcfinder/upload.php?type=flash';
};

修改kcfinder 中config.php ,加入:
$_SESSION['KCFINDER']['disabled'] = false,
完成。
注意如果在linux系统中使用了软链接www root,需要配置kcfinder的uploadurl地址。
12. 升级CKEditor .
出于安全考虑, CKEditor使用 新版本  3.6.6.1替换原始版本3.6.2。
直接替换原始extension/ckeditor/ckeditor,然后修改config.js 同11.
13.修改email 发送为异步发送方式方法:
需求:由于远程邮件服务器访问缓慢,打开邮件提醒功能后,操作缓慢,影响用户体验。
数据库增加表:
DROP TABLE IF EXISTS mail_queue;
CREATE TABLE mail_queue (
  id int(11) unsigned NOT NULL auto_increment,
  subject varchar(255) NOT NULL,
  bodytext text ,
  bodyhtml text ,
  emailto  varchar(255) not null,
  createtime timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (id)

  ) ENGINE=MyISAM  DEFAULT CHARSET=utf8

修改:class-email-notification.php 文件的函数:
function sendEmail($config, $subject, $bodyText, $bodyHtml = null) {
            
                  $emailto = $config->to;     
             $sql =  sprintf("INSERT into mail_queue (subject, bodytext,bodyhtml,emailto) VALUES( '%s', '%s', '%s', '%s')",
                                addslashes($subject),addslashes($bodyText),addslashes($bodyHtml),$emailto);
                  $this->CLASS['db']->query($sql );
           return true;      
       }

建立一个读取mail_queue表中数据然后通过SMTP发送邮件的php文件。
mailqueue_send_job.php
<?php
// mailqueue_send_job.php
// tank add 2013.
$timer = microtime();
$starttime = ((double)strstr($timer, ' ') + (double)substr($timer,0,strpos($timer,' ')));

if (!is_file("config/app.ini")) {
    echo "No configuration file found! ";
    exit();
}
// load requiered files
require_once ('include/init.php');
$config = $CLASS['config']->email;
$res = $CLASS['db']->query("SELECT id, subject,bodytext,bodyhtml,emailto  FROM mail_queue order by id ");
$cnt = $CLASS['db']->num_rows($res);
while($row = $CLASS['db']->fetch_assoc($res)) {
   $id =  $row['id'];
   $res2 = $CLASS['db']->query(sprintf("delete  FROM mail_queue where id = %d ",$id));
  sendEmail($config,$row['emailto'], $row['subject'], $row['bodytext'], $row['bodyhtml']) ;
}
function sendEmail($config, $emailto,$subject, $bodyText, $bodyHtml = null) {
        try {
            $transport = null;

            if($config->host != '') {
                $smtpConfig = array();
                if($config->auth != '') {
                    $smtpConfig['auth'] = $config->auth;
                    $smtpConfig['username'] = $config->username;
                    $smtpConfig['password'] = $config->password;
                }

                if($config->port != '') {
                    $smtpConfig['port'] = $config->port;
                }

                if($config->ssl != '') {
                    $smtpConfig['ssl'] = $config->ssl;
                }

                $transport = new Zend_Mail_Transport_Smtp($config->host, $smtpConfig);
            }
            $mail = new Zend_Mail('UTF-8');                    
                        $mail->addHeader('X-MailGenerator', 'Knowledgeroot');
            $mail->setBodyText($bodyText);
            if($bodyHtml != null) $mail->setBodyHtml($bodyHtml);
            $mail->setFrom($config->from, $config->from_name);
            foreach(explode(",", $emailto) as $value) {
                if(trim($value) != "") {
                    $mail->addTo($value);
                }
            }
            $mail->setSubject($config->subject_prefix . $subject);
            $mail->send($transport);
                        echo  'Sent OK\n';
            return true;
        } catch(Zend_Mail_Transport_Exception $e) {
               $ErrorMsg = $e->getMessage();
                           echo  '\nError 1:' .$ErrorMsg;
            return false;
        } catch(Exception $e) {
                         $ErrorMsg = $e->getMessage();
                           echo '\nsError 2:' . $ErrorMsg;          
            return false;
        }
    }
?>


此php脚本只能使用wget访问执行,在cron 中增加执行shell
#!/bin/sh
wget -O result http://localhost/mailqueue_send_job.php >> log.txt


14.官方插件CKEditor  对于尖括号 <> 不兼容问题修复:
修改 class-ckeditor.php  :
function show($text="") {
            $texthtml = htmlspecialchars($text);
            $texthtml = $text;
        return "<textarea class="ckeditor" id="content" name="content">".$texthtml."</textarea>";
    }

15. 增加首页显示last changes功能:

a. 在include目录中创建类:class-lastchanges.php
   var $CLASS;
    function start(&$CLASS) {
        $this->CLASS =& $CLASS;
    }

    function  getlastchanges() {
...  参考class-history.php类中:function showLastChanges() 方法。
}
-----------------------------------------------------------
b.修改init.php
在最后增加:
require_once($base_path."include/class-lastchanges.php");
//
$CLASS['lastchanges'] = new lastchanges();
$CLASS['lastchanges']->start($CLASS);
------------------------------------------------------------

c.修改:class-knowledgeroot_content.php
1650行附近:
echo "<div class="welcome">".$this->CLASS['translate']->_('Welcome to Knowledgeroot')."</div>\n";
修改为:

               $out =  $this->CLASS['lastchanges']->getlastchanges();
               echo $out;
=========================================

猜你喜欢

转载自panyongzheng.iteye.com/blog/1849446
今日推荐