cgft 发表于 2014-8-27 11:46:26

编写自己的升级(安装)程序

本帖最后由 cgft 于 2014-8-27 14:13 编辑

首先,把升级(安装)程序所用到的所有程序文件(PHP文件、JS文件、CSS文件及各类图像、音频等文件),按实际运行时的目录结构存放。
然后,系统菜单的新建或修改、系统参数的设置或修改、数据库和数据库表的新建或修改,以及其他的一些系统初始化的工作,均交由安装程序去完成。安装程序写好以后,按下述要求准确保存:
1. 升级或模块安装程序,以数字命名,如命名为1.PHP或命名为2.PHP。
2. 假设OA安装在服务器的D盘的MYOA根目录下,则升级或模块安装程序的保存路径为:D:MYOA\webroot\attachment\update
以上工作完成后,使用WinRAR软件将其打包成一个自解压的压缩包,即可发布和分发了。
用户得到该压缩包后,使用方法就和我们通常使用通达提供的软件升级包一样。

下面以一个实际脚本为例,介绍自行二开后,如何编写安装程序。




<?
// ---------- 程序按需要初始化,其中必须有include_once('inc/conn.php') ------------
set_time_limit(0);
include_once('inc/conn.php');
include_once('inc/oa_type.php');
include_once('inc/utility_update.php');

// ---------- 检查OA版本 ------------
if ($VERSION_INFO_MAJOR != 7) {
echo sprintf("当前版本号:%s,因当前版本非2013增强版,升级程序将不会执行。", $VERSION_INFO);
update_lock(MYOA_ATTACH_PATH."update/lock.txt", FALSE);
exit();
}

// ---------- 在系统菜单表中建立主菜单 ------------
// 菜单排序号:26;菜单名:低值易耗品管理;
// 菜单图标:ftc.gif,存放在MYOA\webroot\static\images\menu目录
if(!sys_menu_exists(array("mid" => "26"))) {
$sql= "INSERT INTO sys_menu(MENU_ID,MENU_NAME,IMAGE,MENU_EXT) VALUES ('26','低值易耗品管理','ftc','')";
exequery(TD::conn(), $sql, TRUE);
}

// ---------- 在系统菜单表中建立子菜单 ------------
// 从1070始,建立子菜单。
// 命令中各项含义,可参见OA导航条菜单的“系统管理/菜单设置”中“编辑子菜单项”的说明
if(!sys_func_exists(array("fid" => "1070"))) {
$sql= "INSERT INTO sys_function (FUNC_ID,MENU_ID,FUNC_NAME,FUNC_CODE,FUNC_EXT) VALUES
(1070, '2605', '库存物品查询', 'ftdzyh_Product/query', ''),
(1071, '2610', '领料单据填报', 'ftdzyh_Product/personal', ''),
(1072, '2615', '采购入库登记', 'ftdzyh_Product/procurement', ''),
(1073, '2620', '单据查询导出', 'ftdzyh_Product/statistics', ''),
(1074, '2625', '部门领导审批', 'ftdzyh_Product/dept_approval', ''),
(1075, '2630', '业务主管审批', 'ftdzyh_Product/Warehouse_App', ''),
(1076, '2635', '保管员记账', 'ftdzyh_Product/grant', ''),
(1077, '2640', '仓储业务管理', '@manage', ''),
(1078, '264010', '物品管理', 'ftdzyh_Product/Product', ''),
(1079, '264020', '统计报表', 'ftdzyh_Product/report', ''),
(1080, '264030', '存货盘点', 'ftdzyh_Product/manage', ''),
(1081, '2645', '系统功能定制', 'ftdzyh_Product/setsyspar', '')";
exequery(TD::conn(), $sql, TRUE);
}

// ---------- 在系统参数表中建立子系统参数值 ------------
$query= "SELECT PARA_NAME FROM sys_para WHERE PARA_NAME='FTDZYH_PRODUCT'";
$cursor= exequery(TD::conn(), $query);
if(mysql_num_rows($cursor)==0){
$sql= "INSERT INTO sys_para(PARA_NAME,PARA_VALUE) VALUES
('FTDZYH_PRODUCT','AllowFastSign,tzkgcs,   ……略……   ,PurchaseAudit,|1,|1,|1,')";
exequery(TD::conn(),$sql, TRUE);
}

// ---------- 在系统代码设置表中添加记录 ------------
$query= "SELECT CODE_NO FROM sys_code WHERE CODE_NO='FTDZYH_PRODUCT' AND CODE_NAME='低值易耗品管理'";
$cursor= exequery(TD::conn(), $query);
if(mysql_num_rows($cursor)==0){
$sql= "INSERT INTO sys_code(CODE_NO,CODE_NAME,CODE_ORDER,PARENT_NO,CODE_FLAG) VALUES
('wprkqs', '物品采购入库签收 ', '90', 'SMS_REMIND', '1'),
('qqbmsp', '请求审查签批物品申报单', '91', 'SMS_REMIND', '1'),
                        //…… 略 ……
('SingleLevelApp', '单层级审批调账报废/向采购开放价格参考', '17', 'FTDZYH_PRODUCT', '1'),
('PurchaseAudit', '采购入库须部门审核/向采购开放供应商参考', '18', 'FTDZYH_PRODUCT', '1')";
exequery(TD::conn(), $sql, TRUE);
}

// ---------- 建立数据库表 ------------
// 这里仅以建立一个名为ftdzyh_storage的数据表为例,该表的全部参
// 数可参见:http://club.tongda2000.com/forum.php?mod=redirect&goto=findpost&ptid=15932&pid=53500&fromuid=4288
// 帖中的ftdzyh_storage.sql附件。(下载后,用记事本打开阅读,可领会捷径和技巧)
if(!table_exists("ftdzyh_storage")) {
$sql= "CREATE TABLE IF NOT EXISTS `ftdzyh_storage` (
`STG_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一自增ID',
`STG_NO` int(11) NOT NULL DEFAULT '0' COMMENT '入库单号',
`PRO_ID` int(11) NOT NULL DEFAULT '0' COMMENT '物品ID',
`SRO_NAME` varchar(50) NOT NULL COMMENT '物品名称',
`SRO_DESC` varchar(50) NOT NULL COMMENT '规格型号',
`STG_UNIT` varchar(10) NOT NULL COMMENT '计量单位',
`STG_QTY` decimal(10,3) NOT NULL DEFAULT '0.000' COMMENT '采购数量',
`STR_PRICE` decimal(10,3) NOT NULL DEFAULT '0.000' COMMENT '物品价格',
`REMARK` text NOT NULL COMMENT '备注',
`STR_DATE` date NOT NULL DEFAULT '0000-00-00' COMMENT '制单日期',
`STR_DOCR` varchar(12) NOT NULL COMMENT '经手人',
`STR_AMOUNT` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '物品金额',
`REASON` text NOT NULL COMMENT '拒签理由',
`COMPANY` varchar(40) NOT NULL COMMENT '厂家',
`BAND` varchar(20) NOT NULL COMMENT '品牌',
`DEPT_ID` int(11) NOT NULL COMMENT '部门ID',
`DEPT_MANAGER` varchar(12) NOT NULL COMMENT '部门审批人',
`DEPT_STATUS` int(1) NOT NULL COMMENT '部门审核状态(0-待审核,1-同意,2-不同意)',
`DEPT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '部门审批时间',
`GRANTOR` varchar(12) NOT NULL COMMENT '库房签收人',
`GRAT_STATUS` int(1) NOT NULL DEFAULT '0' COMMENT '签收状态标志(0-待签收,1-已签收,2-退回)',
`GRAT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '库房签收时间',
`ORIGINAL_NUM` varchar(25) NOT NULL COMMENT '采购凭证号',
`TRANS_ID` int(11) NOT NULL DEFAULT '0' COMMENT '物料收发凭证表关联指针',
PRIMARY KEY (`STG_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='采购签收表' AUTO_INCREMENT=1 ;";
exequery(TD::conn(), $sql, TRUE);
}


// ---------- 根据不同的实际需要而编写的善后处理语句
include_once("inc/utility_all.php");
include_once("inc/utility_file.php");
include_once("inc/utility_org.php");
include_once("inc/utility_cache.php");
include_once("inc/utility_flow.php");
clear_online_status();
cache_menu();
cache_censor_words();
cache_censor_module();
cache_sys_para();
cache_interface();
cache_unit();
cache_version();
cache_department();
rebuildusercache();
rebuildprivcache();
cache_attach_para();
cache_workflow_all();
include_once("inc/utility_cache.php");
cache_menu();

// 安装完成,结束
$UPDATE_TIPS= "<div class=\"update_tips\">"._("2013增强版低值易耗品模块安装完成!")."</div>";
ob_end_clean();
?>

cgft 发表于 2014-8-28 16:27:44

禁止用户登录后自动禁止移动版登录及即时通讯使用权限

本帖最后由 cgft 于 2014-9-29 10:03 编辑

管理规则:若禁止了某用户登录OA系统,需要自动停止该用户登录手机客户端的权限和即时通讯的使用权限。

详见:【分享】禁止用户登录后禁止移动版和即时通讯使用
http://club.tongda2000.com/forum.php?mod=viewthread&tid=17220&fromuid=4288

可以采用2种方式来保证上述规则的准确实施:
1、在数据库后台管理工具php MyAdmin中执行如下SQL命令:


UPDATE `TD_OA`.`user` SET `NOT_MOBILE_LOGIN` = '1', `IM_RANGE` = '2' WHERE `user`.`NOT_LOGIN`= '1' ;
2、不会使用MyAdmin者,可下载本帖附件,解压至OA服务器安装目录后以OA管理员身份登录,执行升级程序。



说明:
1.在禁止某用户登录OA系统后,本补丁是用于禁止该用户的登录手机客户端权限和即时通讯使用权限
2.执行补丁前建议先备份数据库
3.将1.php文件放置到OA安装目录下的webroot\attachment\update目录下(已按目录结构打包,可直接替换)
4.本补丁可重复执行,不会有其他不良影响

cgft 发表于 2014-9-25 15:51:50

如果OA系统是安装在服务器的D盘的MYOA目录,则可以下载本附件后直接运行:

cjdos 发表于 2014-9-26 11:20:42

你这个是支持什么版本的?:(:(:(

xfbar_5 发表于 2014-9-26 13:23:52

增强版 本身 就是这样啊,OA精灵和网页登陆互不影响!
页: [1]
查看完整版本: 编写自己的升级(安装)程序