PageController.class.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class PageController extends BaseController {
  5. //展示某个项目的单个页面
  6. public function index(){
  7. import("Vendor.Parsedown.Parsedown");
  8. $page_id = I("page_id/d");
  9. $page = D("Page")->where(" page_id = '$page_id' ")->find();
  10. $login_user = $this->checkLogin(false);
  11. if (!$this->checkItemVisit($login_user['uid'] , $page['item_id'])) {
  12. $this->message(L('no_permissions'));
  13. return;
  14. }
  15. $ItemPermn = $this->checkItemPermn($login_user['uid'] , $page['item_id']) ;
  16. $ItemCreator = $this->checkItemCreator($login_user['uid'],$page['item_id']);
  17. //$Parsedown = new \Parsedown();
  18. //$page['page_content'] = $Parsedown->text(htmlspecialchars_decode($page['page_content']));
  19. $this->assign("page" , $page);
  20. $this->display();
  21. }
  22. //展示单个页面
  23. public function single(){
  24. import("Vendor.Parsedown.Parsedown");
  25. $page_id = I("page_id/d");
  26. $page = D("Page")->where(" page_id = '$page_id' ")->find();
  27. $login_user = $this->checkLogin(false);
  28. if (!$this->checkItemVisit($login_user['uid'] , $page['item_id'],$_SERVER['REQUEST_URI'])) {
  29. $this->message(L('no_permissions'));
  30. return;
  31. }
  32. $ItemPermn = $this->checkItemPermn($login_user['uid'] , $page['item_id']) ;
  33. $ItemCreator = $this->checkItemCreator($login_user['uid'],$page['item_id']);
  34. $page['page_md_content'] = $page['page_content'];
  35. //$page['page_html_content'] = $Parsedown->text(htmlspecialchars_decode($page['page_content']));
  36. $this->assign("page" , $page);
  37. $this->display();
  38. }
  39. //返回单个页面的源markdown代码
  40. public function md(){
  41. $page_id = I("page_id/d");
  42. $page = D("Page")->where(" page_id = '$page_id' ")->find();
  43. echo $page['page_content'];
  44. }
  45. //编辑页面
  46. public function edit(){
  47. $login_user = $this->checkLogin();
  48. $page_id = I("page_id/d");
  49. $item_id = I("item_id/d");
  50. $page_history_id = I("page_history_id/d");
  51. $copy_page_id = I("copy_page_id/d");
  52. if ($page_id > 0 ) {
  53. if ($page_history_id) {
  54. $page = D("PageHistory")->where(" page_history_id = '$page_history_id' ")->find();
  55. $page_content = gzuncompress(base64_decode($page['page_content']));
  56. $page['page_content'] = $page_content ? $page_content : $page['page_content'] ;
  57. }else{
  58. $page = D("Page")->where(" page_id = '$page_id' ")->find();
  59. }
  60. $default_cat_id = $page['cat_id'];
  61. }
  62. //如果是复制接口
  63. elseif ($copy_page_id) {
  64. $copy_page = D("Page")->where(" page_id = '$copy_page_id' ")->find();
  65. $page['page_title'] = $copy_page['page_title']."-copy";
  66. $page['page_content'] = $copy_page['page_content'];
  67. $page['item_id'] = $copy_page['item_id'];
  68. $default_cat_id = $copy_page['cat_id'];
  69. }else{
  70. //查找用户上一次设置的目录
  71. $last_page = D("Page")->where(" author_uid ='$login_user[uid]' and $item_id = '$item_id' ")->order(" addtime desc ")->limit(1)->find();
  72. $default_cat_id = $last_page['cat_id'];
  73. }
  74. $item_id = $page['item_id'] ?$page['item_id'] :$item_id;
  75. if (!$this->checkItemPermn($login_user['uid'] , $item_id)) {
  76. $this->message(L('no_permissions'));
  77. return;
  78. }
  79. $Catalog = D("Catalog")->where(" cat_id = '$default_cat_id' ")->find();
  80. if ($Catalog['parent_cat_id']) {
  81. $default_second_cat_id = $Catalog['parent_cat_id'];
  82. $default_child_cat_id = $default_cat_id;
  83. }else{
  84. $default_second_cat_id = $default_cat_id;
  85. }
  86. $this->assign("api_doc_templ" , 'MdTemplate/api-doc.'.LANG_SET);
  87. $this->assign("database_doc_templ" , 'MdTemplate/database.'.LANG_SET);
  88. $this->assign("page" , $page);
  89. $this->assign("item_id" , $item_id);
  90. $this->assign("default_second_cat_id" , $default_second_cat_id);
  91. $this->assign("default_child_cat_id" , $default_child_cat_id);
  92. $this->display();
  93. }
  94. //保存
  95. public function save(){
  96. $login_user = $this->checkLogin();
  97. $page_id = I("page_id/d") ? I("page_id/d") : 0 ;
  98. $page_title = I("page_title") ?I("page_title") : L("default_title");
  99. $page_comments = I("page_comments") ?I("page_comments") :'';
  100. $page_content = I("page_content");
  101. $cat_id = I("cat_id/d")? I("cat_id/d") : 0;
  102. $item_id = I("item_id/d")? I("item_id/d") : 0;
  103. $s_number = I("s_number/d")? I("s_number/d") : 99;
  104. $login_user = $this->checkLogin();
  105. if (!$this->checkItemPermn($login_user['uid'] , $item_id)) {
  106. $this->message(L('no_permissions'));
  107. return;
  108. }
  109. $data['page_title'] = $page_title ;
  110. $data['page_content'] = $page_content ;
  111. $data['page_comments'] = $page_comments ;
  112. $data['s_number'] = $s_number ;
  113. $data['item_id'] = $item_id ;
  114. $data['cat_id'] = $cat_id ;
  115. $data['addtime'] = time();
  116. $data['author_uid'] = $login_user['uid'] ;
  117. $data['author_username'] = $login_user['username'];
  118. if ($page_id > 0 ) {
  119. //在保存前先把当前页面的版本存档
  120. $page = D("Page")->where(" page_id = '$page_id' ")->find();
  121. $insert_history = array(
  122. 'page_id'=>$page['page_id'],
  123. 'item_id'=>$page['item_id'],
  124. 'cat_id'=>$page['cat_id'],
  125. 'page_title'=>$page['page_title'],
  126. 'page_comments'=>$page['page_comments'],
  127. 'page_content'=>base64_encode( gzcompress($page['page_content'], 9)),
  128. 's_number'=>$page['s_number'],
  129. 'addtime'=>$page['addtime'],
  130. 'author_uid'=>$page['author_uid'],
  131. 'author_username'=>$page['author_username'],
  132. );
  133. D("PageHistory")->add($insert_history);
  134. $ret = D("Page")->where(" page_id = '$page_id' ")->save($data);
  135. //统计该page_id有多少历史版本了
  136. $Count = D("PageHistory")->where(" page_id = '$page_id' ")->Count();
  137. if ($Count > 20 ) {
  138. //每个单页面只保留最多20个历史版本
  139. $ret = D("PageHistory")->where(" page_id = '$page_id' ")->limit("20")->order("page_history_id desc")->select();
  140. D("PageHistory")->where(" page_id = '$page_id' and page_history_id < ".$ret[19]['page_history_id'] )->delete();
  141. }
  142. //更新项目时间
  143. D("Item")->where(" item_id = '$item_id' ")->save(array("last_update_time"=>time()));
  144. $return = D("Page")->where(" page_id = '$page_id' ")->find();
  145. }else{
  146. $page_id = D("Page")->add($data);
  147. //更新项目时间
  148. D("Item")->where(" item_id = '$item_id' ")->save(array("last_update_time"=>time()));
  149. $return = D("Page")->where(" page_id = '$page_id' ")->find();
  150. }
  151. if (!$return) {
  152. $return['error_code'] = 10103 ;
  153. $return['error_message'] = 'request fail' ;
  154. }
  155. $this->sendResult($return);
  156. }
  157. //删除页面
  158. public function delete(){
  159. $page_id = I("page_id/d")? I("page_id/d") : 0;
  160. $page = D("Page")->where(" page_id = '$page_id' ")->find();
  161. $login_user = $this->checkLogin();
  162. if (!$this->checkItemCreator($login_user['uid'] , $page['item_id']) && $login_user['uid'] != $page['author_uid']) {
  163. $this->message(L('no_permissions_to_delete_page',array("author_username"=>$page['author_username'])));
  164. return;
  165. }
  166. if ($page) {
  167. $ret = D("Page")->where(" page_id = '$page_id' ")->delete();
  168. //更新项目时间
  169. D("Item")->where(" item_id = '$page[item_id]' ")->save(array("last_update_time"=>time()));
  170. }
  171. if ($ret) {
  172. $this->message(L('delete_succeeded'),U("Home/item/show?item_id={$page['item_id']}"));
  173. }else{
  174. $this->message(L('delete_failed'),U("Home/item/show?item_id={$page['item_id']}"));
  175. }
  176. }
  177. //历史版本
  178. public function history(){
  179. $page_id = I("page_id/d") ? I("page_id/d") : 0 ;
  180. $this->assign("page_id" , $page_id);
  181. $PageHistory = D("PageHistory")->where("page_id = '$page_id' ")->order(" addtime desc")->limit(10)->select();
  182. if ($PageHistory) {
  183. foreach ($PageHistory as $key => &$value) {
  184. $page_content = gzuncompress(base64_decode($value['page_content']));
  185. $value['page_content'] = $page_content ? $page_content : $value['page_content'] ;
  186. $value['addtime'] = date("Y-m-d H:i:s" , $value['addtime']);
  187. }
  188. }
  189. $this->assign("PageHistory" , $PageHistory);
  190. $this->display();
  191. }
  192. //上传图片
  193. public function uploadImg(){
  194. $qiniu_config = C('UPLOAD_SITEIMG_QINIU') ;
  195. if (!empty($qiniu_config['driverConfig']['secrectKey'])) {
  196. //上传到七牛
  197. $Upload = new \Think\Upload(C('UPLOAD_SITEIMG_QINIU'));
  198. $info = $Upload->upload($_FILES);
  199. $url = $info['editormd-image-file']['url'] ;
  200. echo json_encode(array("url"=>$url,"success"=>1));
  201. }else{
  202. $upload = new \Think\Upload();// 实例化上传类
  203. $upload->maxSize = 3145728 ;// 设置附件上传大小
  204. $upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
  205. $upload->rootPath = './Public/Uploads/';// 设置附件上传目录
  206. $upload->savePath = '';// 设置附件上传子目录
  207. $info = $upload->upload() ;
  208. if(!$info) {// 上传错误提示错误信息
  209. $this->error($upload->getError());
  210. return;
  211. }else{// 上传成功 获取上传文件信息
  212. $url = get_domain().__ROOT__.substr($upload->rootPath,1).$info['editormd-image-file']['savepath'].$info['editormd-image-file']['savename'] ;
  213. echo json_encode(array("url"=>$url,"success"=>1));
  214. }
  215. }
  216. }
  217. public function diff(){
  218. $login_user = $this->checkLogin();
  219. $page_history_id = I("page_history_id/d");
  220. $page_id = I("page_id/d");
  221. $page = D("Page")->where(" page_id = '$page_id' ")->find();
  222. $cur_page_content = $page['page_content'];
  223. $item_id = $page['item_id'] ?$page['item_id'] :$item_id;
  224. if (!$this->checkItemPermn($login_user['uid'] , $item_id)) {
  225. $this->message(L('no_permissions'));
  226. return;
  227. }
  228. $page = D("PageHistory")->where(" page_history_id = '$page_history_id' ")->find();
  229. $page_content = gzuncompress(base64_decode($page['page_content']));
  230. $history_page_content = $page_content ? $page_content : $page['page_content'] ;
  231. $this->assign("cur_page_content" , $cur_page_content);
  232. $this->assign("history_page_content" , $history_page_content);
  233. $this->display();
  234. }
  235. }