通達OA二次開發手冊 二維碼
295
發表時間:2019-12-24 16:40網址:http://www.jgarfunkel.com 通達Office Anywhere網絡智能OA辦公系統二次開發手冊 Office Anywhere網絡智能辦公系統(以下簡稱通達OA),不僅是一套成熟的網絡辦公系統,同時也是一個完整、精巧的軟件開發平臺,不僅集成了Web開發的全套環境,并提供了管理架構、系統資源的開放性支持,是開發中小型管理應用系統的理想平臺。 本文將從不同的技術層面向您揭示通達OA的二次開發細節,是主要針對專職程序設計人員、編程愛好者、軟件產品技術支持人員編寫的OA二次開發入門教程。 通過閱讀本文,您將不僅可以了解通達OA的設計奧秘,也將能夠運用本文所介紹的知識和技巧,輕松構建屬于自己的應用系統或模塊,文中將結合具體實例加以說明。 通達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語言的使用,可參閱http://www.php.net,下載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 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數據壓縮 注:以上所有的配置選項修改后都需要重啟服務才會生效。 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 )。該管理工具的使用需具有一定數據庫基礎,請勿進行危險操作,以免導致數據丟失。 phpMyAdmin主界面如下 在左側選擇TD數據庫,可查看OA所有的數據表,如下圖 點擊左側的表名,則右側列出該表的結構和字段、索引、記錄數等信息,如下圖 phpMyAdmin的具體使用教程方法可以參考 通達網站/OA知識庫/Office Anywhere 高級應用技巧/OA數據庫管理工具/mysql網頁方式管理工具/phpMyAdmin的安裝和使用.wmv 。 創建一個模塊一般需要經過以下幾個步驟:根據功能建立程序存放目錄、創建菜單、分配菜單權限、編碼、測試等。 在MYOA\webroot\general下建議一個目錄abc,作為自己開發模塊的目錄,將程序放置于該目錄下,默認頁面是index.php或index.html或index.htm 用管理員帳號進入OA,打開 系統管理->菜單設置,在相應的一級菜單后點擊“下一級”鏈接,在右側的界面上點擊“增加子菜單項”按鈕,如下圖所示: 詳細閱讀上圖界面中的說明信息,按界面上說明的要求定義好菜單: 子菜單項ID:系統自動生成,無須調整 上級菜單:根據自己的實際應用情況調整 子菜單項代碼:兩位的數字或字母,作為排序之用 子菜單項名稱:根據自己的實際應用自行填寫 子菜單模塊路徑:該菜單對應的程序目錄,應為上一個步驟創建的目錄名稱。如果為abc,則該菜單對應的菜單圖片名稱為MYOA\webroot\static\images\menu\abc.gif,需要自己創建或拷貝abc.gif拷貝至MYOA\webroot\static\images\menu下. 用管理員帳號進入OA,打開 系統管理->組織機構設置->角色與權限管理,給相關的角色分配剛創建的菜單的使用權限,則相關角色的人員就可以在OA界面左側的菜單中看到并訪問該菜單。 為便于用戶開發自己的模塊,通達科技在用戶服務區提供了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系統變量和數據庫的使用。 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"]; //本句中的.表示字符串連接 ?> 以下是一段樣例代碼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> 程序運行結果如下: 以下程序代碼為讀取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數據庫,可自行修改連接參數。 函數原型: Message($TITLE, $CONTENT, $STYLE="" , $BUTTONS=array()) 功能描述: 輸出一個信息提示框的HTML代碼 參數: $TITLE //信息框標題 $CONTENT //信息框提示信息 $STYLE //信息框樣式,可選的值有error、warning、stop、forbidden、help、info $BUTTONS //操作按鈕數組 返回值: 無 函數原型: Button_Back($HTML_CHARSET = '') 功能描述: 輸出一個返回按鈕的HTML代碼 參數: $HTML_CHARSET //解析編碼 返回值: 無 函數原型: find_id($STRING, $ID) 功能描述: 在字符串$STRING中查找子串$ID 參數: $STRING //以英文逗號(,)連接的N個ID值的一個字符串,如a,b,c,d $ID //要查找的子符串,如c 返回值: 找到則返回true,否則返回false,布爾值 函數原型: get_client_ip() 功能描述: 獲取用戶的客戶端IP地址 參數: 無 返回值: 用戶的客戶端IP地址字符串 函數原型: csubstr(&$str, $start=0, $long=0, $ltor=true, $cn_len=2) 功能描述: 截取中文字符串 參數: $str //要截取的字符串 $start //截取起始位置,默認從頭開始 $long //要截取的長度 $ltor //系統保留 $cn_len //系統保留 返回值: 截取后的中文字符串。 函數原型: is_ip($IP) 功能描述: 判斷一個字符串是否是一個合法的IP地址 參數: $IP //IP地址字符串 返回值: 如果$IP是一個IP地址則返回true,否則返回false。 函數原型: add_log($TYPE,$REMARK,$OPERATOR) 功能描述: 添加系統日志 參數: $TYPE //日志類型代碼,參考系統代碼設置下的“系統日志類型” $REMARK //備注 $OPERATOR //產生日志的用戶的用戶名,一般為當前用戶 返回值: 無 函數原型: 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'); //輸出“個人短信,公告通知” 函數原型: dept_long_name($DEPT_ID) 功能描述: 獲取部門ID為$DEPT_ID的多級部門名稱 參數: $DEPT_ID //部門ID 返回值: $DEPT_ID對應的部門長名稱,如“系統處/OA開發組” 函數原型: 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"); 函數原型: set_sys_para($PARA_ARRAY) 功能描述: 批量設置系統參數 參數: $PARA_ARRAY //系統參數數組,數組鍵值為參數名,如array("MENU_DISPLAY"=>"1") 返回值: 無 函數原型: is_dept_parent($DEPT_ID,$PARENT_ID) 功能描述: 判斷一個部門是否是另外一個部門的上級部門 參數: $DEPT_ID //要判斷的部門ID $PARENT_ID //上級部門ID 返回值: 是則返回true,否則返回false。 函數原型: top_dept($DEPT_ID) 功能描述: 獲取部門ID為$DEPT_ID的部門的最上級部門的ID。 參數: $DEPT_ID //部門ID 返回值: 最上級部門的ID。 函數原型: GetDeptNameById($ID_STR) 功能描述: 獲取N個部門的部門名稱。 參數: $ID_STR //N個部門的ID,用逗號串起來,如“1,2,” 返回值: N個部門名稱字符串,用逗號串起來,如“系統部,OA開發組”。 函數原型: GetPrivNameById($ID_STR) 功能描述: 獲取N個角色的角色名稱。 參數: $ID_STR //N個角色的ID,用逗號串起來,如“1,2,” 返回值: N個角色名稱字符串,用逗號串起來,如“OA管理員,職員”。 函數原型: GetUserNameById($ID_STR) 功能描述: 獲取N個用戶的用戶姓名。 參數: $ID_STR //N個用戶的用戶名,用逗號串起來,如“admin,lqh,” 返回值: N個用戶的真實姓名字符串,用逗號串起來,如“系統管理員,劉清華”。 函數原型: GetUserNameByUid($ID_STR) 功能描述: 獲取N個用戶的用戶姓名。 參數: $ID_STR //N個用戶的數字,用逗號串起來,如“1,2,” 返回值: N個用戶的真實姓名字符串,用逗號串起來,如“系統管理員,劉清華”。 函數原型: my_exclude_uid() 功能描述: 獲取當前用戶不能與之通訊的用戶的數字ID(UID)。 參數: 無 返回值: 當前用戶不能與之通訊的用戶的數字ID(UID)。 函數原型: 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 //點擊短信提醒彈出窗口的“查看詳情”打開的地址 返回值: 無 函數原型: delete_sms($SMS_ID_STR,$DEL_TYPE) 功能描述: 刪除內部短消息。 參數: $SMS_ID_STR //要刪除的短信ID串,用逗號串起來,如“1,2,3” $DEL_TYPE //DEL_TYPE=1 刪除收到的短信,DEL_TYPE=2 刪除發送的短信 返回值: 無 函數原型: 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 //短信類型代碼,參考系統代碼設置下的“內部短消息類型” 返回值: 無 函數原型: send_mobile_sms($SEND_TIME,$FROM_ID,$PHONE,$CONTENT) 功能描述: 向指定號碼發送手機短信。 參數: $SEND_TIME //發送時間字符串,如“2013-11-20 09:00:00” $FROM_ID //發送人用戶名,如“admin” $PHONE //接收手機號碼字符串,如“138xxxxxxxx,139xxxxxxxx” $CONTENT //短信內容 返回值: 無 函數原型: upload($PREFIX="ATTACHMENT",$MODULE="" , $OUTPUT=true) 功能描述: 上傳附件,可以一次上傳多個附件。 參數: $PREFIX //表單File控件名稱的前綴,一般為默認即可 $MODULE //模塊代碼,如內部郵件為email,為空則根據程序路徑自動判斷 $OUTPUT //參數判斷 返回值: 無 函數原型: delete_attach($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="") 功能描述: 刪除附件,可以一次刪除多個附件。 參數: $ATTACHMENT_ID //附件ID,多個附件ID用逗號隔開 $ATTACHMENT_NAME //附件名稱,多個附件名稱用*號隔開 $MODULE //模塊代碼,如內部郵件為email,為空則根據程序路徑自動判斷斷 返回值: 無 函數原型: attach_size($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="") 功能描述: 獲取附件大小。 參數: $ATTACHMENT_ID //附件ID $ATTACHMENT_NAME //附件名稱 $MODULE //模塊代碼,如內部郵件為email,為空則根據程序路徑自動判斷斷 返回值: 附件大小,單位字節。 函數原型: 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串,多個附件的話用逗號隔開。 函數原型: is_uploadable($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否允許上傳。 參數: $FILE_NAME //要判斷的文件名 返回值: 允許上傳則返回true,否則返回false。 函數原型: is_text($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否是文本文件。 參數: $FILE_NAME //要判斷的文件名 返回值: 是文本文件則返回true,否則返回false。 函數原型: is_office($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否是Office文檔。 參數: $FILE_NAME //要判斷的文件名 返回值: 是Office文檔則返回true,否則返回false。 函數原型: is_image($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否是圖片。 參數: $FILE_NAME //要判斷的文件名 返回值: 是圖片則返回true,否則返回false。 函數原型: is_viewable($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否可以直接瀏覽,如htm、pdf、圖片等。 參數: $FILE_NAME //要判斷的文件名 返回值: 可以直接瀏覽則返回true,否則返回false。 函數原型: is_media($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否是媒體文件,如視頻、音頻文件等。 參數: $FILE_NAME //要判斷的文件名 返回值: RealPlayer播放類型返回1,如rm、rmvb等 MediaPlayer播放類型返回2,如wmv、mpeg等 可直接在瀏覽器里打開的類型返回3,如圖片、pdf、html等 Flash播放類型返回4,如flv,fla等 其它返回0 函數原型: dir_size($dir) 功能描述: 根據目錄路徑返回其下屬子目錄和文件的大小。 參數: $dir //服務器目錄路徑,如D:/MYOA 返回值: 目錄大小,單位字節。 函數原型: 功能描述: 根據目錄路徑刪除該目錄及其所有下屬子目錄和文件。 參數: $DIR //服務器目錄路徑,如D:/MYOA $RECYCLE //刪除目錄和文件前,是否放到oa指定的回收目錄,true放到回收目錄 $MODULE //指定回收目錄的模塊代碼 返回值: 無 函數原型: attach_sub_dir() 功能描述: 根據程序路徑判斷其所屬模塊。 參數: 無 返回值: 附件所屬模塊代碼,如在/general/email/new/submit.php中調用該函數則返回email。 函數原型: attach_real_path($ATTACHMENT_ID,$ATTACHMENT_NAME,$MODULE="") 功能描述: 根據附件的ID、名稱等獲取該附件在服務器上存儲的物理路徑。 參數: $ATTACHMENT_ID //附件ID $ATTACHMENT_NAME //附件名稱 $MODULE //附件所述模塊代碼 返回值: 附件在服務器上的物理路徑,如D:/MYOA/attach/email/1311/123456789.二次開發手冊.doc。 函數原型: attach_id_encode($ATTACHMENT_ID,$ATTACHMENT_NAME) 功能描述: 根據附件的真實ID和名稱獲取在前臺代碼中顯示的ID。 參數: $ATTACHMENT_ID //附件ID $ATTACHMENT_NAME //附件名稱 返回值: 經過加密處理的ID。 函數原型: attach_id_decode($ATTACHMENT_ID,$ATTACHMENT_NAME) 功能描述: 根據附件的加密ID和真實名稱獲取真實ID。 參數: $ATTACHMENT_ID //附件加密ID $ATTACHMENT_NAME //附件真實名稱 返回值: 附件的真實ID。 函數原型: td_copy($source, $dest) 功能描述: 拷貝文件。 參數: $source //要復制的文件 $dest //復制文件的目標路徑 返回值: 成功則返回 true,否則返回 FALSE 函數原型: td_rename($oldname, $newname) 功能描述: 重命名文件或目錄。 參數: $oldname //要重命名的文件或目錄 $newname //文件或目錄的新名稱 返回值: 成功則返回 true,否則返回 FALSE 函數原型: td_move_uploaded_file($filename, $destination) 功能描述: 將上傳的文件移動到新位置。 參數: $filename //要移動的文件 $destination //文件的新位置 返回值: 成功則返回 true,否則返回 false 函數原型: td_file_put_contents($filename, $data, $flag = FALSE) 功能描述: 把一個字符串寫入文件中。 參數: $filename //要寫入數據的文件 $data //要寫入的數據 $flag //如何打開/寫入文件,一般為默認即可 返回值: 寫入到文件內數據的字節數 函數原型: add_attach_module($MODULE , $MODULE_NAME="") 功能描述: 在數據庫attachment_module表中增加一條模塊記錄。 參數: $MODULE //附件所屬模塊代碼 $MODULE_NAME //附件所屬模塊名稱 返回值: 無 函數原型: attach_module_id($MODULE) 功能描述: 根據模塊名稱取得attachment_module表中模塊的id 參數: $MODULE //附件所屬模塊代碼 返回值: attachment_module表中模塊的id 函數原型: 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 //附件名稱 返回值: 附件在服務器上存儲的物理路徑 函數原型: cache_attach_para () 功能描述: 更新附件參數緩存 參數: 無 返回值: 無 函數原型: 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函數獲取相關鏈接地址數組。 函數原型: attach_url_pda($ATTACHMENT_ID, $ATTACHMENT_NAME, $P, $MODULE) 功能描述: 根據附件信息獲得附件操作時的跳轉路徑,pda訪問時 參數: $ ATTACHMENT_ID //附件ID $ ATTACHMENT_NAME //附件名稱 $ P //密鑰 $ MODULE //模塊所屬模塊代碼 返回值: 附件鏈接地址數組,pda訪問時 URL_ARRAY = array( ‘down’=> xxx, //下載 ); 函數原型: 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編碼 返回值: 文件操作集合組成的按鈕 函數原型: 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訪問時的文件操作集合組成的按鈕 函數原型: attach_url_old($ATTACHMENT_ID, $ATTACHMENT_NAME) 功能描述: 根據附件信息獲得附件操作時的跳轉路徑 參數: $ ATTACHMENT_ID //附件ID $ ATTACHMENT_NAME //附件名稱 返回值: 同attach_url,但只適用于webroot/attachment目錄下存儲的 URL_ARRAY = array( ‘down’=> xxx, //下載 ‘view’=> xxx, //查看 ); 函數原型: upload_old($ATTACHMENT,$ATTACHMENT_NAME) 功能描述: 上傳附件。存儲在webroot\attachment目錄下的附件 參數: $ ATTACHMENT //表單File控件名稱的前綴,一般為默認即可 $ ATTACHMENT_NAME //附件名稱 返回值: 一個隨機生成數,即附件的ID 函數原型: add_attach_old($SOURCE_FILE, $ATTACHMENT_ID, $ATTACHMENT_NAME) 功能描述: 添加附件(webroot\attachment目錄下的附件) 參數: $SOURCE_FILE //附件文件 $ATTACHMENT_ID //附件ID $ATTACHMENT_NAME //附件名稱 返回值: 成功返回ture,失敗返回false 函數原型: delete_attach_old($ATTACHMENT_ID,$ATTACHMENT_NAME) 功能描述: 刪除附件,可以一次刪除多個附件。 刪除的是webroot\attachment目錄下的附件 參數: $ATTACHMENT_ID //附件ID,多個附件ID用逗號隔開 $ATTACHMENT_NAME //附件名稱,多個附件名稱用*號隔開 返回值: 無 函數原型: 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 函數原型: copy_attach_netdisk($ATTACH_DIR,$ATTACH_NAME,$DISK_ID,$MODULE="") 功能描述: 通過網絡硬盤方式復制一個或多個附件 參數: $ATTACH_DIR //附件目錄 $ATTACH_NAME //附件名稱 $DISK_ID //網絡硬盤ID $MODULE //附件所屬模塊代碼 返回值: 新的附件新ID組成的串,用逗號連接 函數原型: copy_sel_attach($ATTACH_NAME,$ATTACH_DIR,$DISK_ID) 功能描述: 復制一個或多個附件 參數: $ATTACH_NAME //附件名稱 $ATTACH_DIR //附件目錄 $DISK_ID //網絡硬盤ID 返回值: 新的附件新ID組成的串,用逗號連接 函數原型: office_attach($NEW_TYPE,$NEW_NAME,$MODULE="") 功能描述: 創建Office附件 參數: $NEW_TYPE //文檔類型 $NEW_NAME //文件名稱,無后綴 $MODULE //附件所屬模塊代碼 返回值: 新的附件的新ID 函數原型: create_attach($NAME,$CONTENT,$MODULE="") 功能描述: 創建一個附件 參數: $NAME //文件名 $CONTENT //文件內容 $MODULE //附件所屬模塊代碼 返回值: 新的附件的新ID 函數原型: is_editable($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否可以編輯 參數: $FILE_NAME //要判斷的文件名 返回值: 可以編輯則返回true,否則返回false。 函數原型: is_wps($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否是wps類型 參數: $FILE_NAME //要判斷的文件名 返回值: 是wps則返回true,否則返回false。 函數原型: is_ppt_xls($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否ppt或excel文檔。 參數: $FILE_NAME //要判斷的文件名 返回值: 是ppt或excel文檔則返回true,否則返回false。 函數原型: is_thumbable($FILE_NAME) 功能描述: 根據附件名稱判斷該類型的文件是否是網頁圖片。(jpg,jpeg,png,gif中的一種) 參數: $FILE_NAME //要判斷的文件名 返回值: 是網頁圖片則返回true,否則返回false。 函數原型: image_mimetype($fichier) 功能描述: 根據文件類型取得文件的圖標 參數: $ fichier //文件名 返回值: 對應的圖片名稱 函數原型: file_type($file_name) 功能描述: 判斷文件是不是系統文件(.db) 參數: $ file_name //文件名 返回值: 如果是系統文件返回true,否則返回false。 函數原型: file_type($file_name) 功能描述: 取得文件類型 參數: $ file_name //文件名 返回值: 文件類型 函數原型: mime_type($file_name) 功能描述: 取得文件HTTP協議Content-Type 參數: $ file_name //文件名 返回值: 文件HTTP協議Content-Type 函數原型: trim_office_attach($ATTACHMENT_ID, $ATTACHMENT_NAME) 功能描述: 從傳入的附件中過濾掉offcie文檔附件 參數: $ATTACHMENT_ID //附件ID,多個用“,”連接 $ATTACHMENT_NAME //附件名稱,多個用“*”連接 返回值: 過濾掉office文檔之后的附件數組 函數原型: dir_file_nums($dir) 功能描述: 取得目錄下的文件數量 參數: $dir //目錄路徑 返回值: 目錄下文件數量 函數原型: CreateThumb($file,$maxwdt,$maxhgt, $dest, $quality=1) 功能描述: 創建圖片的縮略圖 參數: $file //圖片文件 $maxwdt //最大寬度 $maxhgt //最大高度 $dest //創建圖片的保存位置 $quality //圖片質量 返回值: 創建成功返回true,否則返回 false。 函數原型: ReplaceImageSrc($CONTENT, $ATTACHMENTS=array(), $MODULE="") 功能描述: 將附件中的圖片顯示在正文里 參數: $ CONTENT //正文內容 $ATTACHMENTS //表單中提交的附件內容 $MODULE //附件所屬模塊代碼 返回值: 包含了圖片的正文內容 函數原型: trim_inserted_image($CONTENT, $ATTACHMENT_ID, $ATTACHMENT_NAME) 功能描述: 獲取排除掉已經插入到正文中的圖片,剩下的附件 參數: $CONTENT //正文內容 $ATTACHMENT_ID //附件ID,多個附件ID用逗號隔開 $ATTACHMENT_NAME //附件名稱,多個附件名稱用*號隔開 返回值: 剩余附件的數量,附件ID (多個用逗號連接),附件名稱(多個用*連接)組成的數組 函數原型: backup_file($FILE_SRC) 功能描述: 根據附件在服務器上存儲的物理路徑備份文件 參數: $FILE_SRC //附件在服務器上存儲的物理路徑 返回值: 由路徑,經過處理時間,文件名組成的字符串 函數原型: 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()方法得到的文件名字符串信息 返回值: 無 函數原型: attach_id_explode($ATTACHMENT_ID) 功能描述: 根據附件ID,拆分獲得附件在附件表中的基本信息 參數: $ATTACHMENT_ID //附件ID 返回值: 附件表中id,附件id,年月信息,簽章的密鑰組成的數組 函數原型: attach_id_implode($AID, $YM, $ATTACHMENT_ID, $SIGN_KEY = 0) 功能描述: 根據附件在附件表中的基本信息,取得附件新ID 參數: $AID //附件表中id $YM //年月信息 $ATTACHMENT_ID //附件表中的附件id $SIGN_KEY //簽章的密鑰 返回值: 返回 id,年月信息,簽章的密鑰這些組成的附件id 公用組件為JavaScript腳本的前臺代碼,目的是為了簡化前端程序的二次開發,開發出和OA結合更緊密、更一致的功能。 函數原型: 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> 函數原型: 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> 函數原型: 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> 函數原型: 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> 函數原型: 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> |