通达OA二次开发手册
前 言
Office Anywhere网络智能办公系统(以下简称通达OA),不仅是一套成熟的网络办公系统,同时也是一个完整、精巧的软件开发平台,不仅集成了Web开发的全套环境,并提供了管理架构、系统资源的开放性支持,是开发中小型管理应用系统的理想平台。
本文将从不同的技术层面向您揭示通达OA的二次开发细节,是主要针对专职程序设计人员、编程爱好者、软件产品技术支持人员编写的OA二次开发入门教程。
通过阅读本文,您将不仅可以了解通达OA的设计奥秘,也将能够运用本文所介绍的知识和技巧,轻松构建属于自己的应用系统或模块,文中将结合具体实例加以说明。
第一章 软件开发环境简介
1.1 编程环境
通达OA主要采用PHP语言开发,系统使用MySQL数据库。
在Windows平台下,通达OA主要注册了9个系统服务,可以通过控制面板-〉管理工具-〉服务,查看这9项服务,服务名分别是Office_Anywhere、MySQL5_OA、memcached Server、OfficeDaemon、OfficeIm、OfficeIndex、OfficeMail、OfficePOP3、OfficeTask,Office_Anywhere服务实际是集成了PHP模块的Apache服务,Apache是通达OA所使用的Web Server,通达OA也可以支持IIS作为Web Server,具体配置方法参见通达网站OA知识库相关文档。
关于PHP语言的使用,可参阅,下载PHP手册,作为开发指导;关于MySQL数据库的管理与使用,将在第二章进行详细介绍。
1.2目录层次结构
通达OA的目录层次结构清晰,体现出对服务程序、应用程序、WEB页面的巧妙整合与组织,便于理解和扩充,下面对目录结构加以说明:
MYOA
├─attach OA附件文件存放目录
├─bin Apache、PHP、Zend等主程序及配置文件,服务配置程序等
├─conf Apache配置文件
├─data5 MySQL数据库文件目录
│ ├─BUS 公交线路查询数据库
│ ├─TD_OA 通达OA主数据库
│ ├─MySQL MySQL系统数据库
│ ├─TD_OA_ARCHIVE 通达OA归档数据库
│ ├─ib_logfile0 InnoDB引擎使用的日志文件
│ ├─ib_logfile1 InnoDB引擎使用的日志文件
│ └─ibdata1 InnoDB引擎存储数据与索引的数据文件
├─logs Apache等日志文件目录
├─modules Apache的模块文件
├─MyAdmin 通达OA的MySQL管理工具
├─mysql5 MySQL主程序文件
├─nginx 高性能的通达Nginx Web应用服务
├─tmp 临时文件目录
└─webroot 通达OA的WEB根目录(PHP程序目录)
├─attachment 部分OA附件文件存放目录
│ ├─hrms_pic 人事档案照片目录
│ ├─product_pic 销售管理产品照片存放目录
│ ├─new_sms 新短消息提醒状态文件
│ ├─…… 部分附件目录(略)
│ ├─rss 今日资讯信息缓存文件
│ ├─update 系统升级,该文件夹下如存在1.php会被自动执行并删除
│ ├─weather 天气预报缓存文件
│ └─wm 外部邮件存储目录
├─general 主要模块目录
│ ├─ …… 一般模块目录(略)
│ ├─ipanel 主控面板,集成了菜单、短信箱等应用控制界面
│ ├─mytable 桌面模块程序
│ └─system 系统功能模块,下级目录略
├─inc 系统通用程序及函数目录
├─ispirit OA精灵页面
├─mobile OA移动界面
├─module 系统组件
│ ├─dept_select 部门选择组件
│ ├─editor 简易HTML编辑器组件
│ ├─OC Office 文档在线编辑与阅读
│ ├─OC_NETDISK 文档在线编辑与阅读-仅适用于网络硬盘
│ ├─save_file 文件转存组件
│ ├─user_select 用户多选组件
│ └─user_select_single 用户单选组件
├─portal 门户界面
└─static 系统通用程序及静态文件目录
├─common 通用css文件及其引用的图片文件
├─images 所有代码中的<img>标签src引用的图片文件
├─templates 登录界面模版
├─theme 界面主题
├─wav 微讯提醒声音
├─js 界面主题
├─templates 登录界面模版
└─modules 所有模块非通用的css文件及其引用的图片文件等的目录
├─address 通讯簿非通用css文件及其引用的图片文件
├─ …… 部分模块目录(略)
└─workflow 工作流非通用css文件及其引用的图片文件
注:上表中红色颜色标示的目录是备份数据时需要备份的,是OA的所有数据所存放的目录。
1.3参数配置
1.3.1 Apache配置
(MYOA\conf\httpd.conf)Timeout 300 //连接超时,单位秒
ServerTokens Prod //Apache信息,Full,OS,Minor,Minimal,Major,Prod
ErrorDocument //错误文档
ErrorLog logs/error.log //错误日志
CustomLog logs/access.log combined //访问日志
1.3.2 PHP配置
(MYOA\bin\php.ini)display_errors = Off //是否显示PHP程序错误
log_errors = Off //是否记录错误日志
error_log = filename //错误日志记录文件
max_execution_time = 1200 //程序最大执行时间,单位秒
memory_limit = 256M //单个程序占用内存上限
post_max_size = 1000M //表单提交最大数据量,单位MB
upload_max_filesize = 200M //上传单个附件大小,单位MB
1.3.2 MySQL配置
(MYOA\mysql5\my.ini)basedir=D:/MYOA/mysql5/ //MySQL主程序路径
datadir=D:/MYOA/data5/ //MySQL数据库路径
tmpdir=D:/MYOA/tmp/ //缓存路径
character-set-server=gbk //MySQL数据库字编码
port=3336 //端口
wait_timeout=30 //SQL语句执行结束后自动断开时间
interactive_timeout=30 //运行SQL语句时段开时间
skip-name-resolve //避免外部锁定(默认是ON)
bind-address=0.0.0.0 //允许远程连接
innodb_file_per_table=1 //启用独立表空间模式
innodb_file_format=Barracuda //InnoDB数据压缩
注:以上所有的配置选项修改后都需要重启服务才会生效。
第二章 数据库管理
2.1 phpMyAdmin的安装
MySQL的数据库管理工具很多,phpMyAdmin是使用PHP编写的免费MySQL数据库管理工具。由于OA的MySQL数据库出于安全考虑,被配置为仅能从本机访问,所以使用phpMyAdmin这样的B/S结构的管理工具,可实现数据库的远程管理。
第一步、下载程序包
phpMyAdmin程序可以从其官方网站http://www.phpmyadmin.net下载,建议下载最新的all-language版本。
第二步、解压缩
在MYOA\webroot目录下新建一个目录,如mysql369(为了防止他人利用该工具侵入数据库系统,可把目录名设为比较复杂的,如MySQL2345,避免目录名被猜测到。),将下载的程序包解压后拷贝至mysql369目录下。
第三步、修改配置文件
用文本编辑器,如记事本,打开MySQL管理工具目录,复制config.sample.inc.php文件并改名为confing.inc.php,打开后修改以下配置信息:
$cfg['blowfish_secret'] = ''; //随便输入一个字符串,加密Cookie等信息
$cfg['Servers'][$i]['auth_type'] = 'http'; //http,config,cookie,建议使用http
$cfg['Servers'][$i]['host'] = 'localhost'; //数据库地址,默认为localhost
$cfg['Servers'][$i]['port'] = '3336'; //数据库端口,默认为3336
$cfg['Servers'][$i]['user'] = 'root'; //数据库用户名,默认为root
$cfg['Servers'][$i]['password'] = ''; //数据库密码,默认为myoa888
第四步、使用phpMyAdmin
MySQL管理工具地址:http://OA地址/mysql,注意,进入后先选择中文界面(中文-Chinese simplified )。该管理工具的使用需具有一定数据库基础,请勿进行危险操作,以免导致数据丢失。
2.2 phpMyAdmin的使用
phpMyAdmin主界面如下
在左侧选择TD数据库,可查看OA所有的数据表,如下图
点击左侧的表名,则右侧列出该表的结构和字段、索引、记录数等信息,如下图
phpMyAdmin的具体使用教程方法可以参考 通达网站/OA知识库/Office Anywhere 高级应用技巧/OA数据库管理工具/mysql网页方式管理工具/phpMyAdmin的安装和使用.wmv 。
第三章 如何创建一个模块
创建一个模块一般需要经过以下几个步骤:根据功能建立程序存放目录、创建菜单、分配菜单权限、编码、测试等。
3.1建立模块目录
在MYOA\webroot\general下建议一个目录abc,作为自己开发模块的目录,将程序放置于该目录下,默认页面是index.php或index.html或index.htm
3.2 创建菜单
用管理员帐号进入OA,打开 系统管理->菜单设置,在相应的一级菜单后点击"下一级"链接,在右侧的界面上点击"增加子菜单项"按钮,如下图所示:
详细阅读上图界面中的说明信息,按界面上说明的要求定义好菜单:
子菜单项ID:系统自动生成,无须调整
上级菜单:根据自己的实际应用情况调整
子菜单项代码:两位的数字或字母,作为排序之用
子菜单项名称:根据自己的实际应用自行填写
子菜单模块路径:该菜单对应的程序目录,应为上一个步骤创建的目录名称。如果为abc,则该菜单对应的菜单图片名称为MYOA\webroot\static\images\menu\abc.gif,需要自己创建或拷贝abc.gif拷贝至MYOA\webroot\static\images\menu下.
3.3 分配菜单权限
用管理员帐号进入OA,打开 系统管理->组织机构设置->角色与权限管理,给相关的角色分配刚创建的菜单的使用权限,则相关角色的人员就可以在OA界面左侧的菜单中看到并访问该菜单。
3.4 编码和测试
为便于用户开发自己的模块,通达科技在用户服务区提供了Office Anywhere部份模块源码的下载,供开发人员参考。
用户自行开发OA的功能模块,需要根据OA的相关规范进行开发,这样既可以使自行开发的模块和OA的界面效果一致,又可以保证自行开发的程序在OA安全框架的保护之下,这样不仅可以保证新模块数据的安全,又可以使开发人员集中精力投入到模块功能的开发上。
OA的各功能模块下的每个程序都需要包含OA的安全验证程序:inc/auth.inc.php。该程序包含了对用户登录信息、是否有权限访问该路径等的检查等。具体的语法为:include_once("inc/auth.inc.php");为更好兼容更多版本的浏览器,需要使用标准统一的HTML解析模式对页面进行解析和渲染,在所有包含HTML代码输出的页面,都需要包含:inc/header.inc.php,输出统一的HTML头信息,包括采用的HTML标准、页面字符集、页面标题、标准界面样式表(style.css)等。在没有HTML代码输出的页面,不需要包含该文件。OA数据库的所有表名全部使用小写字母,字段名称全部使用大写字母,新模块中字段名也建议与表名统一使用小写字母,开发过程请注意。
在开发自己的功能模块时可以参考现有OA模块,把功能相似的OA模块代码复制一份,然后在OA 代码的基础上修改。以下几个小节介绍OA系统变量和数据库的使用。
3.4.1 系统变量
OA系统提供了16个通过SESSION保存的当前用户的系统变量,分别是
$_SESSION["LOGIN_UID"] //用户数字ID
$_SESSION["LOGIN_USER_ID"] //用户名,登录使用
$_SESSION["LOGIN_BYNAME"] //用户别名
$_SESSION["LOGIN_USER_NAME"] //用户真实姓名
$_SESSION["LOGIN_USER_PRIV"] //用户角色ID
$_SESSION["LOGIN_USER_PRIV_OTHER"] //用户辅助角色ID
$_SESSION["LOGIN_SYS_ADMIN"] //用户是否有系统管理员权限
$_SESSION["LOGIN_DEPT_ID"] //用户部门ID
$_SESSION["LOGIN_DEPT_ID_OTHER"] //用户辅助部门ID
$_SESSION["LOGIN_AVATAR"] //用户头像
$_SESSION["LOGIN_THEME"] //用户界面主题
$_SESSION["LOGIN_FUNC_STR"] //用户模块权限
$_SESSION["LOGIN_NOT_VIEW_USER"] //用户禁止查看用户列表
$_SESSION["LOGIN_DEPT_ID_JUNIOR"] //用户所在部门和所属部门合集字符串
$_SESSION["LOGIN_CLIENT"] //用户登录OA的设备类型
$_SESSION["LOGIN_USER_SEX"] //用户性别
如需使用这些系统变量,程序需要包含auth.inc.php,如下代码:
<?
include_once("inc/auth.inc.php");
echo "我的登录用户ID是".$_SESSION["LOGIN_USER_ID"]; //本句中的.表示字符串连接
?>
3.4.2 PHP代码样例
以下是一段样例代码index.php,可放置于abc目录下,可作为开发OA应用程序的模版。//或/*…*/是PHP的注释语句。
<?
include_once("inc/auth.inc.php"); // 如需登录验证则包含,未登录将退出
//include_once("inc/conn.php"); // 如需要连接数据库则包含
//include_once("inc/utility_all.php"); // 如需要使用公用函数则包含
//include_once("inc/check_type.php"); // 如需要使用类型检验函数则包含
$HTML_PAGE_TITLE = _("功能模块名称");
include_once("inc/header.inc.php"); // 如有HTML代码输出则包含
//如已包含auth.inc.php,则无须包含conn.php
?>
<body class="bodycolor">
<?
echo "当前登录的用户为:".$_SESSION["LOGIN_USER_NAME"].",用户名为:".$_SESSION["LOGIN_USER_ID"];
?>
</body>
</html>
程序运行结果如下:
3.4.3 连接数据库代码
以下程序代码为读取admin用户所属部门的示例:
<?
include_once("inc/auth.inc.php"); // 如需登录验证则包含,未登录将退出
include_once("inc/utility_all.php"); // 如需要使用公用函数则包含
$HTML_PAGE_TITLE = _("功能模块名称");
include_once("inc/header.inc.php"); // 如有HTML代码输出则包含
?>
<body class="bodycolor">
<?
$query = "SELECT * from USER where USER_ID='admin'";
$cursor= exequery(TD::conn(),$query);
/*
exequery 是OA系统inc/conn.php包装的SQL语句执行函数,TD::conn()n是数据库的连接标识符
*/
if($ROW=MySQL_fetch_array($cursor))
$DEPT_ID=$ROW["DEPT_ID"];
echo "admin用户所在部门为:<u>".dept_long_name($DEPT_ID)."</u>";
?>
</body>
</html>
执行效果如下图:
从这段程序可以看出,使用OA系统提供的系统头文件和函数,访问数据库将是一件很轻松的事,不用操心数据库的连接参数等问题,只需简单的写下SQL语句,执行它。
MySQL数据库的连接参数在 MYOA\webroot\inc\oa_config.php文件中配置,如果自己安装MySQL数据库,可自行修改连接参数。
第四章 内置函数参考
4.1 utility.php
4.1.1 Message
函数原型:
Message($TITLE, $CONTENT, $STYLE="", $BUTTONS=array())
功能描述:
输出一个信息提示框的HTML代码
参数:
$TITLE //信息框标题
$CONTENT //信息框提示信息
$STYLE //信息框样式,可选的值有error、warning、stop、forbidden、help、info
$BUTTONS //操作按钮数组
返回值:
无
4.1.2 Button_Back
函数原型:
Button_Back($HTML_CHARSET = '')
功能描述:
输出一个返回按钮的HTML代码
参数:
$HTML_CHARSET //解析编码
返回值:
无
4.1.3 find_id
函数原型:
find_id($STRING, $ID)
功能描述:
在字符串$STRING中查找子串$ID
参数:
$STRING //以英文逗号(,)连接的N个ID值的一个字符串,如a,b,c,d
$ID //要查找的子符串,如c
返回值:
找到则返回true,否则返回false,布尔值
4.1.4 get_client_ip
函数原型:
get_client_ip()
功能描述:
获取用户的客户端IP地址
参数:
无
返回值:
用户的客户端IP地址字符串
4.2 utility_all.php
4.2.1 csubstr
函数原型:
csubstr(&$str, $start=0, $long=0, $ltor=true, $cn_len=2)
功能描述:
截取中文字符串
参数:
$str //要截取的字符串
$start //截取起始位置,默认从头开始
$long //要截取的长度
$ltor //系统保留
$cn_len //系统保留
返回值:
截取后的中文字符串。
4.2.2 is_ip
函数原型:
is_ip($IP)
功能描述:
判断一个字符串是否是一个合法的IP地址
参数:
$IP //IP地址字符串
返回值:
如果$IP是一个IP地址则返回true,否则返回false。
4.2.3 add_log
函数原型:
add_log($TYPE,$REMARK,$OPERATOR)
功能描述:
添加系统日志
参数:
$TYPE //日志类型代码,参考系统代码设置下的"系统日志类型"
$REMARK //备注
$OPERATOR //产生日志的用户的用户名,一般为当前用户
返回值:
无
4.2.4 get_code_name
函数原型:
get_code_name($CODE_NO,$PARENT_NO)
功能描述:
获取系统代码的描述
参数:
$CODE_NO //系统代码的代码值,如果多个代码则用英文逗号串起来
$PARENT_NO //父类型代码值
返回值:
对应代码值的文字描述
示例代码:
echo get_code_name('0','SMS_REMIND'); //输出"个人短信"
echo get_code_name('0,1','SMS_REMIND'); //输出"个人短信,公告通知"
4.2.5 dept_long_name
函数原型:
dept_long_name($DEPT_ID)
功能描述:
获取部门ID为$DEPT_ID的多级部门名称
参数:
$DEPT_ID //部门ID
返回值:
$DEPT_ID对应的部门长名称,如"系统处/OA开发组"
4.2.6 get_sys_para
函数原型:
get_sys_para($PARA_NAME_STR, $USE_CACHE = true)
功能描述:
获取系统参数设置的参数值并返回一个数组
参数:
$PARA_NAME_STR //系统参数名称字符串,多个的话用英文逗号隔开
$USE_CACHE //是否从缓存中获取
返回值:
系统参数值的数组
代码示例:
$PARA_ARRAY=get_sys_para("MENU_DISPLAY,MENU_EXPAND_SINGLE");
$PARA_ARRAY为array( "MENU_DISPLAY" => "1", "MENU_EXPAND_SINGLE" => "0");
4.2.7 set_sys_para
函数原型:
set_sys_para($PARA_ARRAY)
功能描述:
批量设置系统参数
参数:
$PARA_ARRAY //系统参数数组,数组键值为参数名,如array("MENU_DISPLAY"=>"1")
返回值:
无
4.3 utility_org.php
4.3.1 is_dept_parent
函数原型:
is_dept_parent($DEPT_ID,$PARENT_ID)
功能描述:
判断一个部门是否是另外一个部门的上级部门
参数:
$DEPT_ID //要判断的部门ID
$PARENT_ID //上级部门ID
返回值:
是则返回true,否则返回false。
4.3.2 top_dept
函数原型:
top_dept($DEPT_ID)
功能描述:
获取部门ID为$DEPT_ID的部门的最上级部门的ID。
参数:
$DEPT_ID //部门ID
返回值:
最上级部门的ID。
4.3.3 GetDeptNameById
函数原型:
GetDeptNameById($ID_STR)
功能描述:
获取N个部门的部门名称。
参数:
$ID_STR //N个部门的ID,用逗号串起来,如"1,2,"
返回值:
N个部门名称字符串,用逗号串起来,如"系统部,OA开发组"。
4.3.4 GetPrivNameById
函数原型:
GetPrivNameById($ID_STR)
功能描述:
获取N个角色的角色名称。
参数:
$ID_STR //N个角色的ID,用逗号串起来,如"1,2,"
返回值:
N个角色名称字符串,用逗号串起来,如"OA管理员,职员"。
4.3.5 GetUserNameById
函数原型:
GetUserNameById($ID_STR)
功能描述:
获取N个用户的用户姓名。
参数:
$ID_STR //N个用户的用户名,用逗号串起来,如"admin,lqh,"
返回值:
N个用户的真实姓名字符串,用逗号串起来,如"系统管理员,刘清华"。
4.3.6 GetUserNameByUid
函数原型:
GetUserNameByUid($ID_STR)
功能描述:
获取N个用户的用户姓名。
参数:
$ID_STR //N个用户的数字,用逗号串起来,如"1,2,"
返回值:
N个用户的真实姓名字符串,用逗号串起来,如"系统管理员,刘清华"。
4.3.7 my_exclude_uid
函数原型:
my_exclude_uid()
功能描述:
获取当前用户不能与之通讯的用户的数字ID(UID)。
参数:
无
返回值:
当前用户不能与之通讯的用户的数字ID(UID)。
4.4 utility_sms1.php
4.4.1 send_sms
函数原型:
send_sms($SEND_TIME,$FROM_ID,$TO_ID,$SMS_TYPE,$CONTENT,$REMIND_URL="")
功能描述:
发送内部短消息。
参数:
$SEND_TIME //发送时间字符串,如"2013-11-20 09:00:00"
$FROM_ID //发送人用户名,如"admin"
$TO_ID //接收人用户名用逗号串起来的字符串,如"lqh,lxq"
$SMS_TYPE //短信类型代码,参考系统代码设置下的"内部短消息类型"
$CONTENT //短信内容
$REMIND_URL //点击短信提醒弹出窗口的"查看详情"打开的地址
返回值:
无
4.4.2 delete_sms
函数原型:
delete_sms($SMS_ID_STR,$DEL_TYPE)
功能描述:
删除内部短消息。
参数:
$SMS_ID_STR //要删除的短信ID串,用逗号串起来,如"1,2,3"
$DEL_TYPE //DEL_TYPE=1 删除收到的短信,DEL_TYPE=2 删除发送的短信
返回值:
无
4.5 utility_sms2.php
4.5.1 send_mobile_sms_user
函数原型:
send_mobile_sms_user($SEND_TIME,$FROM_ID,$TO_ID,$CONTENT,$TYPE)
功能描述:
给OA用户发送手机短信。
参数:
$SEND_TIME //发送时间字符串,如"2013-11-20 09:00:00"
$FROM_ID //发送人用户名,如"admin"
$TO_ID //接收人用户名用逗号串起来的字符串,如"lqh,lxq"
$CONTENT //短信内容
$TYPE //短信类型代码,参考系统代码设置下的"内部短消息类型"
返回值:
无
4.5.2 send_mobile_sms
函数原型:
send_mobile_sms($SEND_TIME,$FROM_ID,$PHONE,$CONTENT)
功能描述:
向指定号码发送手机短信。
参数:
$SEND_TIME //发送时间字符串,如"2013-11-20 09:00:00"
$FROM_ID //发送人用户名,如"admin"
$PHONE //接收手机号码字符串,如"138xxxxxxxx,139xxxxxxxx"
$CONTENT //短信内容
返回值:
无
4.6 utility_file.php
4.6.1 upload
函数原型:
upload($PREFIX="ATTACHMENT",$MODULE="", $OUTPUT=true)
功能描述:
上传附件,可以一次上传多个附件。
参数:
$PREFIX //表单File控件名称的前缀,一般为默认即可
$MODULE //模块代码,如内部邮件为email,为空则根据程序路径自动判断
$OUTPUT //参数判断
返回值:
无
4.6.2 delete_attach
函数原型:
delete_attach($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
删除附件,可以一次删除多个附件。
参数:
$ATTACHMENT_ID //附件ID,多个附件ID用逗号隔开
$ATTACHMENT_NAME //附件名称,多个附件名称用*号隔开
$MODULE //模块代码,如内部邮件为email,为空则根据程序路径自动判断断
返回值:
无
4.6.3 attach_size
函数原型:
attach_size($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
获取附件大小。
参数:
$ATTACHMENT_ID //附件ID
$ATTACHMENT_NAME //附件名称
$MODULE //模块代码,如内部邮件为email,为空则根据程序路径自动判断断
返回值:
附件大小,单位字节。
4.6.4 copy_attach
函数原型:
copy_attach($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE_SRC="",$MODULE_DESC="", $ID_IS_REAL = true)
功能描述:
拷贝一个或多个附件。
参数:
$ATTACHMENT_ID //附件ID,多个附件ID用逗号隔开
$ATTACHMENT_NAME //附件名称,多个附件名称用*号隔开
$MODULE_SRC //原附件所属模块代码,为空则根据程序路径自动判断断
$MODULE_DESC //新附件所属模块代码,为空则根据程序路径自动判断断
$ID_IS_REAL //$ATTACHMENT_ID是文件的真实ID,还是attach_id_decode过之后的,数据库中存的一般是真实的
返回值:
新附件的附件ID串,多个附件的话用逗号隔开。
4.6.5 is_uploadable
函数原型:
is_uploadable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否允许上传。
参数:
$FILE_NAME //要判断的文件名
返回值:
允许上传则返回true,否则返回false。
4.6.6 is_text
函数原型:
is_text($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是文本文件。
参数:
$FILE_NAME //要判断的文件名
返回值:
是文本文件则返回true,否则返回false。
4.6.7 is_office
函数原型:
is_office($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是Office文档。
参数:
$FILE_NAME //要判断的文件名
返回值:
是Office文档则返回true,否则返回false。
4.6.8 is_image
函数原型:
is_image($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是图片。
参数:
$FILE_NAME //要判断的文件名
返回值:
是图片则返回true,否则返回false。
4.6.9 is_viewable
函数原型:
is_viewable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否可以直接浏览,如htm、pdf、图片等。
参数:
$FILE_NAME //要判断的文件名
返回值:
可以直接浏览则返回true,否则返回false。
4.6.10 is_media
函数原型:
is_media($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是媒体文件,如视频、音频文件等。
参数:
$FILE_NAME //要判断的文件名
返回值:
RealPlayer播放类型返回1,如rm、rmvb等
MediaPlayer播放类型返回2,如wmv、mpeg等
可直接在浏览器里打开的类型返回3,如图片、pdf、html等
Flash播放类型返回4,如flv,fla等
其它返回0
4.6.11 dir_size
函数原型:
dir_size($dir)
功能描述:
根据目录路径返回其下属子目录和文件的大小。
参数:
$dir //服务器目录路径,如D:/MYOA
返回值:
目录大小,单位字节。
4.6.12 delete_dir
函数原型:
delete_dir($DIR, $RECYCLE = true, $MODULE = "")
功能描述:
根据目录路径删除该目录及其所有下属子目录和文件。
参数:
$DIR //服务器目录路径,如D:/MYOA
$RECYCLE //删除目录和文件前,是否放到oa指定的回收目录,true放到回收目录
$MODULE //指定回收目录的模块代码
返回值:
无
4.6.13 attach_sub_dir
函数原型:
attach_sub_dir()
功能描述:
根据程序路径判断其所属模块。
参数:
无
返回值:
附件所属模块代码,如在/general/email/new/submit.php中调用该函数则返回email。
4.6.14 attach_real_path
函数原型:
attach_real_path($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="")
功能描述:
根据附件的ID、名称等获取该附件在服务器上存储的物理路径。
参数:
$ATTACHMENT_ID //附件ID
$ATTACHMENT_NAME //附件名称
$MODULE //附件所述模块代码
返回值:
附件在服务器上的物理路径,如D:/MYOA/attach/email/1311/123456789.二次开发手册.doc。
4.6.15 attach_id_encode
函数原型:
attach_id_encode($ATTACHMENT_ID,$ATTACHMENT_NAME)
功能描述:
根据附件的真实ID和名称获取在前台代码中显示的ID。
参数:
$ATTACHMENT_ID //附件ID
$ATTACHMENT_NAME //附件名称
返回值:
经过加密处理的ID。
4.6.16 attach_id_decode
函数原型:
attach_id_decode($ATTACHMENT_ID,$ATTACHMENT_NAME)
功能描述:
根据附件的加密ID和真实名称获取真实ID。
参数:
$ATTACHMENT_ID //附件加密ID
$ATTACHMENT_NAME //附件真实名称
返回值:
附件的真实ID。
4.6.17 td_copy
函数原型:
td_copy($source, $dest)
功能描述:
拷贝文件。
参数:
$source //要复制的文件
$dest //复制文件的目标路径
返回值:
成功则返回 true,否则返回 FALSE
4.6.18 td_rename
函数原型:
td_rename($oldname, $newname)
功能描述:
重命名文件或目录。
参数:
$oldname //要重命名的文件或目录
$newname //文件或目录的新名称
返回值:
成功则返回 true,否则返回 FALSE
4.6.19 td_move_uploaded_file
函数原型:
td_move_uploaded_file($filename, $destination)
功能描述:
将上传的文件移动到新位置。
参数:
$filename //要移动的文件
$destination //文件的新位置
返回值:
成功则返回 true,否则返回 false
4.6.20 td_file_put_contents
函数原型:
td_file_put_contents($filename, $data, $flag = FALSE)
功能描述:
把一个字符串写入文件中。
参数:
$filename //要写入数据的文件
$data //要写入的数据
$flag //如何打开/写入文件,一般为默认即可
返回值:
写入到文件内数据的字节数
4.6.21 add_attach_module
函数原型:
add_attach_module($MODULE , $MODULE_NAME="")
功能描述:
在数据库attachment_module表中增加一条模块记录。
参数:
$MODULE //附件所属模块代码
$MODULE_NAME //附件所属模块名称
返回值:
无
4.6.22 attach_module_id
函数原型:
attach_module_id($MODULE)
功能描述:
根据模块名称取得attachment_module表中模块的id
参数:
$MODULE //附件所属模块代码
返回值:
attachment_module表中模块的id
4.6.23 attach_sign_key
函数原型:
attach_sign_key($ATTACHMENT_ID, $ATTACHMENT_NAME, $ID_IS_REAL = false)
功能描述:
获取office文档的签章的**
参数:
$ATTACHMENT_ID //附件的ID
$ATTACHMENT_NAME //附件的名称
$ID_IS_REAL //$ATTACHMENT_ID是否是真实ID
返回值:
Office文档返回签章**,其他文件返回 0
4.6.24 attach_sign_key_netdisk
函数原型:
attach_sign_key_netdisk($FILE_PATH)
功能描述:
通过网络硬盘信息,获取office文档的签章的**
参数:
$FILE_PATH //通过网路硬盘信息获得的附件在服务器上存储的物理路径
返回值:
Office文档返回签章**,其他文件返回 0
4.6.25 attach_real_path_netdisk
函数原型:
attach_real_path_netdisk($DISK_ID, $ATTACH_DIR, $ATTACH_NAME = "")
功能描述:
通过网络硬盘获取附件在服务器上存储的物理路径
参数:
$DISK_ID //对应网络硬盘表中DISK_ID值
$ATTACH_DIR //附件的路径
$ATTACH_NAME //附件名称
返回值:
附件在服务器上存储的物理路径
4.6.26 cache_attach_para
函数原型:
cache_attach_para ()
功能描述:
更新附件参数缓存
参数:
无
返回值:
无
4.6.27 attach_url
函数原型:
attach_url($ATTACHMENT_ID, $ATTACHMENT_NAME, $MODULE, $OTHER=array())
功能描述:
根据附件信息获得附件的相关链接地址,如下载、查看、阅读、编辑等
参数:
$ ATTACHMENT_ID //附件ID
$ ATTACHMENT_NAME //附件名称
$ MODULE //附件所属模块代码
$OTHER //office文档操作权限,默认不填
返回值:
附件链接地址数组,
$URL_ARRAY = array(
'down'=> xxx, //下载
'rename'=> xxx,//重命名 调用ReNameFile(attachment_id, attachment_name)
'delete'=> xxx,//删除,调用delete_attach(attachment_id, attachment_name)
'office_read'=> xxx,//阅读
'office_edit'=> xxx,//编辑
'office_preview'=> xxx,//Excel文件在线预览
'view'=> xxx,//图片等直接查看
'save'=> xxx,//转存,调用SaveFile(attachment_id, attachment_name)
);
标准附件显示方式可以直接调用attach_link函数实现相关链接输出显示,如果需要直接获取附件的下载路径等信息,可调用attach_url函数获取相关链接地址数组。
4.6.28 attach_url_pda
函数原型:
attach_url_pda($ATTACHMENT_ID, $ATTACHMENT_NAME, $P, $MODULE)
功能描述:
根据附件信息获得附件操作时的跳转路径,pda访问时
参数:
$ ATTACHMENT_ID //附件ID
$ ATTACHMENT_NAME //附件名称
$ P //**
$ MODULE //模块所属模块代码
返回值:
附件链接地址数组,pda访问时
URL_ARRAY = array(
'down'=> xxx, //下载
);
4.6.29 attach_link
函数原型:
attach_link($ATTACHMENT_ID,$ATTACHMENT_NAME,$SHOW_SIZE=0,$DOWN_PRIV=1,$DOWN_PRIV_OFFICE=1,$EDIT_PRIV=0,$DELETE_PRIV=0,$NEW_LINE=1,$SAVE_FILE=1,$CREATE_IMAGE=0,$MODULE="",$IS_UTF8=false,$FORMAT=0)
功能描述:
附件的操作权限
参数:
$ATTACHMENT_ID //附件ID
$ATTACHMENT_NAME //附件名称
$SHOW_SIZE //是否显示文件大小
$DOWN_PRIV //是否可以下载
$DOWN_PRIV_OFFICE //office文档是否可以下载
$EDIT_PRIV //是否可以编辑
$DELETE_PRIV //文件是否可以删除,文件柜中文件时候可以重命名
$NEW_LINE //操作按钮是否换行,默认1
$SAVE_FILE //文件是否可以转存
$CREATE_IMAGE //图片是否可以插入正文
$MODULE //原附件所属模块代码,为空则根据程序路径自动判断断
$IS_UTF8 //是否是UTF8编码
返回值:
文件操作集合组成的按钮
4.6. 30 attach_link_pda
函数原型:
attach_link_pda($ATTACHMENT_ID,$ATTACHMENT_NAME,$P,$MODULE="",$SHOW_SIZE=1,$DOWN_PRIV=1,$NEW_LINE=0)
功能描述:
pda访问时,附件的操作权限
参数:
$ATTACHMENT_ID //附件ID
$ATTACHMENT_NAME //附件名称
$P //
$MODULE //原附件所属模块代码,为空则根据程序路径自动判断断
$SHOW_SIZE //是否显示文件大小
$DOWN_PRIV //文件是否可以下载
$NEW_LINE //操作按钮是否换行,默认0
返回值:
pda访问时的文件操作集合组成的按钮
4.6.31 attach_url_old
函数原型:
attach_url_old($ATTACHMENT_ID, $ATTACHMENT_NAME)
功能描述:
根据附件信息获得附件操作时的跳转路径
参数:
$ ATTACHMENT_ID //附件ID
$ ATTACHMENT_NAME //附件名称
返回值:
同attach_url,但只适用于webroot/attachment目录下存储的
URL_ARRAY = array(
'down'=> xxx, //下载
'view'=> xxx, //查看
);
4.6.32 upload_old
函数原型:
upload_old($ATTACHMENT,$ATTACHMENT_NAME)
功能描述:
上传附件。存储在webroot\attachment目录下的附件
参数:
$ ATTACHMENT //表单File控件名称的前缀,一般为默认即可
$ ATTACHMENT_NAME //附件名称
返回值:
一个随机生成数,即附件的ID
4.6.33 add_attach_old
函数原型:
add_attach_old($SOURCE_FILE, $ATTACHMENT_ID, $ATTACHMENT_NAME)
功能描述:
添加附件(webroot\attachment目录下的附件)
参数:
$SOURCE_FILE //附件文件
$ATTACHMENT_ID //附件ID
$ATTACHMENT_NAME //附件名称
返回值:
成功返回ture,失败返回false
4.6.34 delete_attach_old
函数原型:
delete_attach_old($ATTACHMENT_ID,$ATTACHMENT_NAME)
功能描述:
删除附件,可以一次删除多个附件。
删除的是webroot\attachment目录下的附件
参数:
$ATTACHMENT_ID //附件ID,多个附件ID用逗号隔开
$ATTACHMENT_NAME //附件名称,多个附件名称用*号隔开
返回值:
无
4.6.35 add_attach
函数原型:
add_attach($SOURCE_FILE, $ATTACH_NAME, $MODULE="", $YM="", $ATTACH_SIGN=0, $ATTACH_ID="")
功能描述:
将附件转存,返回转存后得到的附件的新id
参数:
$SOURCE_FILE //附件文件
$ATTACH_NAME //附件名称
$MODULE //附件所属模块代码
$YM //年月信息
$ATTACH_SIGN //office文档签章的**
$ATTACH_ID //附件ID
返回值:
新的附件的新ID
4.6.36 copy_attach_netdisk
函数原型:
copy_attach_netdisk($ATTACH_DIR,$ATTACH_NAME,$DISK_ID,$MODULE="")
功能描述:
通过网络硬盘方式复制一个或多个附件
参数:
$ATTACH_DIR //附件目录
$ATTACH_NAME //附件名称
$DISK_ID //网络硬盘ID
$MODULE //附件所属模块代码
返回值:
新的附件新ID组成的串,用逗号连接
4.6.37 copy_sel_attach
函数原型:
copy_sel_attach($ATTACH_NAME,$ATTACH_DIR,$DISK_ID)
功能描述:
复制一个或多个附件
参数:
$ATTACH_NAME //附件名称
$ATTACH_DIR //附件目录
$DISK_ID //网络硬盘ID
返回值:
新的附件新ID组成的串,用逗号连接
4.6.38 office_attach
函数原型:
office_attach($NEW_TYPE,$NEW_NAME,$MODULE="")
功能描述:
创建Office附件
参数:
$NEW_TYPE //文档类型
$NEW_NAME //文件名称,无后缀
$MODULE //附件所属模块代码
返回值:
新的附件的新ID
4.6.39 create_attach
函数原型:
create_attach($NAME,$CONTENT,$MODULE="")
功能描述:
创建一个附件
参数:
$NAME //文件名
$CONTENT //文件内容
$MODULE //附件所属模块代码
返回值:
新的附件的新ID
4.6.40 is_editable
函数原型:
is_editable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否可以编辑
参数:
$FILE_NAME //要判断的文件名
返回值:
可以编辑则返回true,否则返回false。
4.6.41 is_wps
函数原型:
is_wps($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是wps类型
参数:
$FILE_NAME //要判断的文件名
返回值:
是wps则返回true,否则返回false。
4.6.42 is_ppt_xls
函数原型:
is_ppt_xls($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否ppt或excel文档。
参数:
$FILE_NAME //要判断的文件名
返回值:
是ppt或excel文档则返回true,否则返回false。
4.6.43 is_thumbable
函数原型:
is_thumbable($FILE_NAME)
功能描述:
根据附件名称判断该类型的文件是否是网页图片。(jpg,jpeg,png,gif中的一种)
参数:
$FILE_NAME //要判断的文件名
返回值:
是网页图片则返回true,否则返回false。
4.6.44 image_mimetype
函数原型:
image_mimetype($fichier)
功能描述:
根据文件类型取得文件的图标
参数:
$ fichier //文件名
返回值:
对应的图片名称
4.6.45 Is_SysFile
函数原型:
file_type($file_name)
功能描述:
判断文件是不是系统文件(.db)
参数:
$ file_name //文件名
返回值:
如果是系统文件返回true,否则返回false。
4.6.46 file_type
函数原型:
file_type($file_name)
功能描述:
取得文件类型
参数:
$ file_name //文件名
返回值:
文件类型
4.6.47 mime_type
函数原型:
mime_type($file_name)
功能描述:
取得文件HTTP协议Content-Type
参数:
$ file_name //文件名
返回值:
文件HTTP协议Content-Type
4.6.48 trim_office_attach
函数原型:
trim_office_attach($ATTACHMENT_ID, $ATTACHMENT_NAME)
功能描述:
从传入的附件中过滤掉offcie文档附件
参数:
$ATTACHMENT_ID //附件ID,多个用","连接
$ATTACHMENT_NAME //附件名称,多个用"*"连接
返回值:
过滤掉office文档之后的附件数组
4.6.49 dir_file_nums
函数原型:
dir_file_nums($dir)
功能描述:
取得目录下的文件数量
参数:
$dir //目录路径
返回值:
目录下文件数量
4.6.50 CreateThumb
函数原型:
CreateThumb($file,$maxwdt,$maxhgt, $dest, $quality=1)
功能描述:
创建图片的缩略图
参数:
$file //图片文件
$maxwdt //最大宽度
$maxhgt //最大高度
$dest //创建图片的保存位置
$quality //图片质量
返回值:
创建成功返回true,否则返回 false。
4.6.51 ReplaceImageSrc
函数原型:
ReplaceImageSrc($CONTENT, $ATTACHMENTS=array(), $MODULE="")
功能描述:
将附件中的图片显示在正文里
参数:
$ CONTENT //正文内容
$ATTACHMENTS //表单中提交的附件内容
$MODULE //附件所属模块代码
返回值:
包含了图片的正文内容
4.6.52 trim_inserted_image
函数原型:
trim_inserted_image($CONTENT, $ATTACHMENT_ID, $ATTACHMENT_NAME)
功能描述:
获取排除掉已经插入到正文中的图片,剩下的附件
参数:
$CONTENT //正文内容
$ATTACHMENT_ID //附件ID,多个附件ID用逗号隔开
$ATTACHMENT_NAME //附件名称,多个附件名称用*号隔开
返回值:
剩余附件的数量,附件ID (多个用逗号连接),附件名称(多个用*连接)组成的数组
4.6.53 backup_file
函数原型:
backup_file($FILE_SRC)
功能描述:
根据附件在服务器上存储的物理路径备份文件
参数:
$FILE_SRC //附件在服务器上存储的物理路径
返回值:
由路径,经过处理时间,文件名组成的字符串
4.6.54 oc_log
函数原型:
oc_log($ATTACH_ID, $ATTACH_NAME, $LOG_TYPE="2", $BACKUP_FILE="")
功能描述:
记录备份日志
参数:
$ATTACH_ID //附件ID
$ATTACH_NAME //附件名称
$LOG_TYPE //普通附件:1 阅读,2 编辑保存,4 编辑,3 下载
// 网络硬盘:5 下载(阅读),6 编辑保存
$BACKUP_FILE //经过backup_file()方法得到的文件名字符串信息
返回值:
无
4.6.55 attach_id_explode
函数原型:
attach_id_explode($ATTACHMENT_ID)
功能描述:
根据附件ID,拆分获得附件在附件表中的基本信息
参数:
$ATTACHMENT_ID //附件ID
返回值:
附件表中id,附件id,年月信息,签章的**组成的数组
4.6.56 attach_id_implode
函数原型:
attach_id_implode($AID, $YM, $ATTACHMENT_ID, $SIGN_KEY = 0)
功能描述:
根据附件在附件表中的基本信息,取得附件新ID
参数:
$AID //附件表中id
$YM //年月信息
$ATTACHMENT_ID //附件表中的附件id
$SIGN_KEY //签章的**
返回值:
返回 id,年月信息,签章的**这些组成的附件id
第五章 公用组件参考
公用组件为JavaScript脚本的前台代码,目的是为了简化前端程序的二次开发,开发出和OA结合更紧密、更一致的功能。
5.1 人员多选
函数原型:
SelectUser(MODULE_ID,TO_ID, TO_NAME, MANAGE_FLAG,FORM_NAME,USE_UID)
功能描述:
弹出一个人员多选窗口
加载文件:
/static/js/module.js
参数:
MODULE_ID //模块ID,系统保留,传递空值即可
TO_ID //存放已选人员用户名的字段名,多个用户名用英文逗号隔开
TO_NAME //存放已选人员用户真实姓名的字段名,多个姓名用英文逗号隔开
MANAGE_FLAG //是否显示不允许登录OA人员,默认为0
FORM_NAME //表单名称,默认为"form1"
USE_UID //是否使用UID,默认为空则使用USER_ID
返回值:
无
示例代码:
<script src="/static/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectUser('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
5.2 人员单选
函数原型:
SelectUserSingle(MODULE_ID,TO_ID, TO_NAME, MANAGE_FLAG,FORM_NAME, USE_UID)
功能描述:
弹出一个人员单选窗口
加载文件:
/static/js/module.js
参数:
MODULE_ID //模块ID,系统保留,传递空值即可
TO_ID //存放已选人员用户名的字段名
TO_NAME //存放已选人员用户真实姓名的字段名
MANAGE_FLAG //是否显示不允许登录OA人员,默认为0
FORM_NAME //表单名称,默认为"form1"
USE_UID //是否使用UID,默认为空则使用USER_ID
返回值:
无
示例代码:
<script src="/static/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectUserSingle('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
5.3 部门多选
函数原型:
SelectDept(MODULE_ID,TO_ID, TO_NAME, PRIV_OP, FORM_NAME)
功能描述:
弹出一个部门多选窗口
加载文件:
/static/js/module.js
参数:
MODULE_ID //模块ID,系统保留,传递空值即可
TO_ID //存放已选部门ID的字段名,多个ID用英文逗号隔开
TO_NAME //存放已选部门名称的字段名,多个名称用英文逗号隔开
PRIV_OP //选择部门的范围,0所有部门,1用户管理范围内的部门
FORM_NAME //表单名称,默认为"form1"
返回值:
无
示例代码:
<script src="/static/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectDept('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
5.4 部门单选
函数原型:
SelectDeptSingle(MODULE_ID,TO_ID, TO_NAME, PRIV_OP, FORM_NAME)
功能描述:
弹出一个部门单选窗口
加载文件:
/static/js/module.js
参数:
MODULE_ID //模块ID,系统保留,传递空值即可
TO_ID //存放已选部门ID的字段名
TO_NAME //存放已选部门名称的字段名
PRIV_OP //选择部门的范围,0所有部门,1用户管理范围内的部门
FORM_NAME //表单名称,默认为"form1"
返回值:
无
示例代码:
<script src="/static/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectDeptSingle('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>
5.5 角色多选
函数原型:
SelectPriv(MODULE_ID,TO_ID, TO_NAME, PRIV_OP, FORM_NAME)
功能描述:
弹出一个角色多选窗口
加载文件:
/static/js/module.js
参数:
MODULE_ID //模块ID,系统保留,传递空值即可
TO_ID //存放已选角色ID的字段名,多个ID用英文逗号隔开
TO_NAME //存放已选角色名称的字段名,多个名称用英文逗号隔开
PRIV_OP //默认0,如果当前用户非OA管理员且该参数为1,则不列出OA管理员
FORM_NAME //表单名称,默认为"form1"
返回值:
无
示例代码:
<script src="/static/js/module.js"></script>
<form action="add.php" method="post" name="form1">
<input type="hidden" name="TO_ID" value="">
<textarea cols=40 name="TO_NAME" rows=2 wrap="yes" readonly></textarea>
<a href="javascript:;" onClick="SelectPriv('','TO_ID', 'TO_NAME')">添加</a>
<a href="javascript:;" onClick="ClearUser('TO_ID', 'TO_NAME')">清空</a>
</form>