PageRenderTime 41ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/utils/file.php

http://webbudget.googlecode.com/
PHP | 202 lines | 191 code | 1 blank | 10 comment | 26 complexity | 61b7ed14f7911cb8f410f5a80345cddb MD5 | raw file
  1. <?php
  2. require_once "json.php";
  3. require_once "xml.php";
  4. require_once "session.php";
  5. require_once "message.php";
  6. class NewBudget_File{
  7. private $pagesize=15;
  8. public function __construct(){
  9. $this->xmldb=new NewBudget_XmlDb("../db/files.xml");
  10. }
  11. private function copyXml($sPath,$dPath){
  12. $isCache=0;
  13. $dh=opendir($sPath);
  14. while(false!==($file=readdir($dh))){
  15. if(is_dir($sPath.$file)) continue;
  16. copy($sPath.$file,$dPath.$file);
  17. $isCache=1;
  18. }
  19. closedir($dh);
  20. return $isCache;
  21. }
  22. public function newFile($args){
  23. if(false==$this->isValidCellNo($args["wellno"]))
  24. return array("result"=>0,"reason"=>"???????????");//0:failure 1:success
  25. $fileName=chr(mt_rand(65,90)).chr(mt_rand(65,90)).chr(mt_rand(65,90)).mktime();
  26. mkdir("../db/budget/".$fileName,0766);//copy from book/oiltest/*.xml
  27. $isCache=$this->copyXml("../book/".$args["tempno"]."/cache/","../db/budget/".$fileName."/");//?????cache???
  28. if(0==$isCache) $this->copyXml("../book/".$args["tempno"]."/","../db/budget/".$fileName."/");
  29. $this->reWriteXML("../db/budget/".$fileName,"form_basic.xml",array("D1"=>$args["wellno"]));
  30. $this->reWriteXML("../db/budget/".$fileName,"form_face.xml",array("B4"=>$args["wellno"],"B13"=>date("Y-m-d")));
  31. $node=$this->makeNewFileNode($args["wellno"],$fileName,$isCache,$args["tempno"]);
  32. if(true==$this->xmldb->addNode("/budgets",$node)){
  33. $this->xmldb->saveDoc();//????XML
  34. //newMessage("");
  35. return array("result"=>1,"fileinfo"=>$this->getFileInfo($node));
  36. }
  37. else
  38. return showesg();
  39. }
  40. private function getFileInfo($node){
  41. return array("filename"=>$node->getAttribute("filename"),
  42. "wellno"=>$node->getAttribute("wellno"),
  43. "createdate"=>$node->getAttribute("createdate"),
  44. "author"=>$node->getAttribute("author"),
  45. "status"=>$node->getAttribute("status"),
  46. "tempno"=>$node->getAttribute("tempno"),
  47. "iscache"=>$node->getAttribute("iscache"));
  48. }
  49. private function isValidCellNo($wellNo){
  50. if($this->xmldb->xselect("budget[@wellno='".$wellNo."']")->length>0) return false;
  51. return true;
  52. }
  53. private function makeNewFileNode($wellno,$filename,$isCache,$tempno){
  54. $bNode=$this->xmldb->doc->createElement("budget");
  55. $bNode->setAttribute("filename",$filename);
  56. $bNode->setAttribute("wellno",$wellno);
  57. $bNode->setAttribute("createdate", date("Y-m-d H:i:s"));//??????
  58. $bNode->setAttribute("author",NewBudget_Session::get("username"));
  59. $bNode->setAttribute("status","new");
  60. $bNode->setAttribute("iscache",$isCache);
  61. $bNode->setAttribute("tempno",$tempno);
  62. return $bNode;
  63. }
  64. private function reWriteXML($filename,$bookname,$args){
  65. $xmlbook=new NewBudget_XmlDb($filename."/".$bookname);
  66. //echo(NewBudget_Json::encode($args));
  67. foreach($args as $key=>$value){
  68. //echo($key);
  69. preg_match("/([A-Z]+)(\d+)/",$key,$ma);
  70. if(false==$xmlbook->changeValue("row[@index='".$ma[2]."']/".$ma[1],"value",$value)) return false;
  71. }
  72. $xmlbook->saveDoc();
  73. return true;
  74. }
  75. public function saveFile($args){
  76. $wellno=$args["pake"]["wellno"];
  77. $pake=$args["pake"]["datapake"];
  78. $fileInfo=$this->getFileInfo($this->xmldb->xselect("budget[@wellno='".$wellno."']")->item(0));
  79. if(NewBudget_Session::get("username")!=$fileInfo["author"])
  80. if(false==isAdmin()) return array("result"=>0,"reason"=>"?????");
  81. if("new"!=$fileInfo["status"]&&"reject"!=$fileInfo["status"]&&"draft"!=$fileInfo["status"])
  82. if(false==isAdmin()) return array("result"=>0,"reason"=>"???????");
  83. foreach($pake as $file=>$datas){
  84. if(false==$this->reWriteXML("../db/budget/".$fileInfo["filename"],"form_".$file.".xml",$datas)) return showesg();
  85. }
  86. if("new"==$fileInfo["status"])//????????????????draft
  87. $this->changeAtt(Array("wellno"=>$wellno,"attrs"=>Array("status"=>"draft")));
  88. return array("result"=>1);
  89. }
  90. public function saveCache($args){
  91. $pake=$args["pake"]["datapake"];
  92. $tempno=$args["tempno"];
  93. $this->copyXml("../book/".$tempno."/","../book/".$tempno."/cache/");
  94. foreach($pake as $file=>$datas){
  95. if(false==$this->reWriteXML("../book/".$tempno."/cache","form_".$file.".xml",$datas)) return showesg("");
  96. }
  97. return Array("result"=>1);
  98. }
  99. public function changeAtt($args){
  100. foreach($args["attrs"] as $att=>$value){
  101. if("wellno"==$att) continue;
  102. if("status"==$att&&"commit"==$value) newMessage($args["wellno"]."????",$args["wellno"]."????????");
  103. if(false==$this->xmldb->changeValue("budget[@wellno='".$args["wellno"]."']",$att,$value)) return showesg();
  104. }
  105. $this->xmldb->saveDoc();
  106. return Array("result"=>1);
  107. }
  108. public function listBudget($args){
  109. $page=$args["page"];
  110. //echo $page;
  111. $begin=($page-1)*$this->pagesize;
  112. // NewBudget_Session::set("userrole","guest");
  113. // NewBudget_Session::set("username","??");
  114. if(isAdmin())
  115. $xql="budget";
  116. elseif(isGuest())
  117. $xql="budget[@status='freeze']";
  118. else
  119. $xql="budget[@author='".NewBudget_Session::get("username")."' or @status='freeze']";
  120. //echo $begin;
  121. $rs=$this->xmldb->xselect($xql);
  122. $num=$rs->length;
  123. $tem=$num % $this->pagesize;
  124. $showpagecount=($tem==0)?$num/$this->pagesize:($num-$tem)/$this->pagesize+1;
  125. $result=Array();
  126. $l=0;
  127. //echo $begin.'aa'.$end;
  128. for($i=$begin;$i<$num;$i++){
  129. array_push($result,$this->getFileInfo($rs->item($i)));
  130. if(++$l==$this->pagesize) break;
  131. }
  132. return Array("list"=>$result,"pagecount"=>$showpagecount,"page"=>$page);
  133. }
  134. public function checkBudget($args){
  135. $wellno=$args["wellno"];
  136. if(false==isAdmin()) return showesg("?????");
  137. //$chkResult=(false==$args["result"])?"reject":"freeze";
  138. $reason=$args["reason"];
  139. if(false==$args["result"]){
  140. $chkResult="reject";
  141. newMessage($wellno."?????","??????????$reason");
  142. }
  143. else{
  144. $chkResult="freeze";
  145. newMessage($wellno."????",$wellno."????????????");
  146. }
  147. return $this->changeAtt(Array("wellno"=>$wellno,"attrs"=>Array("status"=>$chkResult)));
  148. }
  149. public function delBudget($args){
  150. $wellno=$args["wellno"];
  151. $filePath=$args["filepath"];
  152. if(false==$this->canDel($wellno)) return showesg("?????");
  153. $this->xmldb->xselect("/budgets")->item(0)->removeChild($this->xmldb->xselect("budget[@wellno='".$wellno."']")->item(0));
  154. $this->xmldb->saveDoc();
  155. if($this->delBudgetDir("../db/budget/".$filePath)) return Array("result"=>1);
  156. else return showesg("?????");
  157. }
  158. private function canDel($wellno){
  159. if(isAdmin()) return true;
  160. if(NewBudget_Session::get('username')==$this->xmldb->xselect("budget[@wellno='$wellno']")->item(0)->getAttribute("author")) return true;
  161. return false;
  162. }
  163. private function delBudgetDir($path){
  164. $dh=opendir($path);
  165. while(false!==($file=readdir($dh))){
  166. if("dir"==filetype($path."/".$file)) continue;
  167. unlink($path."/".$file);
  168. }
  169. closedir($dh);
  170. return rmdir($path);
  171. }
  172. }
  173. checkIsLogin();//??????????
  174. $jsonStr=NewBudget_Json::decode($_POST["json"]);
  175. $fileObj=new NewBudget_File();
  176. switch($_POST["action"]){
  177. case "newFile":
  178. $result=$fileObj->newFile($jsonStr);
  179. break;
  180. case "save":
  181. //echo $_POST["json"];
  182. $result=$fileObj->saveFile($jsonStr);
  183. break;
  184. case "savecache":
  185. $result=$fileObj->saveCache($jsonStr);
  186. break;
  187. case "changeatt":
  188. $result=$fileObj->changeAtt($jsonStr);
  189. break;
  190. case "listbudget":
  191. $result=$fileObj->listBudget($jsonStr);
  192. break;
  193. case "check":
  194. $result=$fileObj->checkBudget($jsonStr);
  195. break;
  196. case "delbudget":
  197. $result=$fileObj->delBudget($jsonStr);
  198. break;
  199. }
  200. echo NewBudget_Json::encode($result);
  201. ?>