ItemController.class.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <?php
  2. namespace Api\Controller;
  3. use Think\Controller;
  4. class ItemController extends BaseController {
  5. //项目详情
  6. public function detail(){
  7. $login_user = $this->checkLogin();
  8. $item_id = I("item_id/d");
  9. $uid = $login_user['uid'] ;
  10. if(!$this->checkItemCreator($uid , $item_id)){
  11. $this->sendError(10303);
  12. return ;
  13. }
  14. $items = D("Item")->where("item_id = '$item_id' ")->find();
  15. $items = $items ? $items : array();
  16. $this->sendResult($items);
  17. }
  18. //更新项目信息
  19. public function update(){
  20. $login_user = $this->checkLogin();
  21. $item_id = I("item_id/d");
  22. $item_name = I("item_name");
  23. $item_description = I("item_description");
  24. $item_domain = I("item_domain");
  25. $password = I("password");
  26. $uid = $login_user['uid'] ;
  27. if(!$this->checkItemCreator($uid , $item_id)){
  28. $this->sendError(10303);
  29. return ;
  30. }
  31. if ($item_domain) {
  32. if(!ctype_alnum($item_domain) || is_numeric($item_domain) ){
  33. //echo '个性域名只能是字母或数字的组合';exit;
  34. $this->sendError(10305);
  35. return false;
  36. }
  37. $item = D("Item")->where("item_domain = '%s' and item_id !='%s' ",array($item_domain,$item_id))->find();
  38. if ($item) {
  39. //个性域名已经存在
  40. $this->sendError(10304);
  41. return false;
  42. }
  43. }
  44. $save_data = array(
  45. "item_name" => $item_name ,
  46. "item_description" => $item_description ,
  47. "item_domain" => $item_domain ,
  48. "password" => $password ,
  49. );
  50. $items = D("Item")->where("item_id = '$item_id' ")->save($save_data);
  51. $items = $items ? $items : array();
  52. $this->sendResult($items);
  53. }
  54. //转让项目
  55. public function attorn(){
  56. $login_user = $this->checkLogin();
  57. $username = I("username");
  58. $item_id = I("item_id/d");
  59. $password = I("password");
  60. $item = D("Item")->where("item_id = '$item_id' ")->find();
  61. if(!$this->checkItemCreator($login_user['uid'] , $item['item_id'])){
  62. $this->sendError(10303);
  63. return ;
  64. }
  65. if(! D("User")-> checkLogin($item['username'],$password)){
  66. $this->sendError(10208);
  67. return ;
  68. }
  69. $member = D("User")->where(" username = '%s' ",array($username))->find();
  70. if (!$member) {
  71. $this->sendError(10209);
  72. return ;
  73. }
  74. $data['username'] = $member['username'] ;
  75. $data['uid'] = $member['uid'] ;
  76. $id = D("Item")->where(" item_id = '$item_id' ")->save($data);
  77. $return = D("Item")->where("item_id = '$item_id' ")->find();
  78. if (!$return) {
  79. $this->sendError(10101);
  80. }
  81. $this->sendResult($return);
  82. }
  83. //删除项目
  84. public function delete(){
  85. $login_user = $this->checkLogin();
  86. $item_id = I("item_id/d");
  87. $password = I("password");
  88. $item = D("Item")->where("item_id = '$item_id' ")->find();
  89. if(!$this->checkItemCreator($login_user['uid'] , $item['item_id'])){
  90. $this->sendError(10303);
  91. return ;
  92. }
  93. if(! D("User")-> checkLogin($item['username'],$password)){
  94. $this->sendError(10208);
  95. return ;
  96. }
  97. D("Page")->where("item_id = '$item_id' ")->delete();
  98. D("Catalog")->where("item_id = '$item_id' ")->delete();
  99. D("PageHistory")->where("item_id = '$item_id' ")->delete();
  100. D("ItemMember")->where("item_id = '$item_id' ")->delete();
  101. $return = D("Item")->where("item_id = '$item_id' ")->delete();
  102. if (!$return) {
  103. $this->sendError(10101);
  104. }else{
  105. }
  106. $this->sendResult($return);
  107. }
  108. //归档项目
  109. public function archive(){
  110. $login_user = $this->checkLogin();
  111. $item_id = I("item_id/d");
  112. $password = I("password");
  113. $item = D("Item")->where("item_id = '$item_id' ")->find();
  114. if(!$this->checkItemCreator($login_user['uid'] , $item['item_id'])){
  115. $this->sendError(10303);
  116. return ;
  117. }
  118. if(! D("User")-> checkLogin($item['username'],$password)){
  119. $this->sendError(10208);
  120. return ;
  121. }
  122. $return = D("Item")->where("item_id = '$item_id' ")->save(array("is_archived"=>1));
  123. if (!$return) {
  124. $this->sendError(10101);
  125. }else{
  126. $this->sendResult($return);
  127. }
  128. }
  129. public function getKey(){
  130. $login_user = $this->checkLogin();
  131. $item_id = I("item_id/d");
  132. $item = D("Item")->where("item_id = '$item_id' ")->find();
  133. if(!$this->checkItemCreator($login_user['uid'] , $item['item_id'])){
  134. $this->sendError(10303);
  135. return ;
  136. }
  137. $item_token = D("ItemToken")->getTokenByItemId($item_id);
  138. if (!$item_token) {
  139. $this->sendError(10101);
  140. }
  141. $this->sendResult($item_token);
  142. }
  143. public function resetKey(){
  144. $login_user = $this->checkLogin();
  145. $item_id = I("item_id/d");
  146. $item = D("Item")->where("item_id = '$item_id' ")->find();
  147. if(!$this->checkItemCreator($login_user['uid'] , $item['item_id'])){
  148. $this->sendError(10303);
  149. return ;
  150. }
  151. $ret = D("ItemToken")->where("item_id = '$item_id' ")->delete();
  152. if ($ret) {
  153. $this->getKey();
  154. }else{
  155. $this->sendError(10101);
  156. }
  157. }
  158. public function updateByApi(){
  159. $api_key = I("api_key");
  160. $api_token = I("api_token");
  161. $cat_name = I("cat_name");
  162. $cat_name_sub = I("cat_name_sub");
  163. $page_title = I("page_title");
  164. $page_content = I("page_content");
  165. $s_number = I("s_number") ? I("s_number") : 99;
  166. $ret = D("ItemToken")->getTokenByKey($api_key);
  167. if ($ret && $ret['api_token'] == $api_token) {
  168. $item_id = $ret['item_id'] ;
  169. D("ItemToken")->setLastTime($item_id);
  170. }else{
  171. $this->sendError(10306);
  172. return false;
  173. }
  174. //如果传送了二级目录
  175. if ($cat_name) {
  176. $cat_name_array = D("Catalog")->where(" item_id = '$item_id' and level = 2 and cat_name = '%s' ",array($cat_name))->find();
  177. //如果不存在则新建
  178. if (!$cat_name_array) {
  179. $add_data = array(
  180. "cat_name" => $cat_name,
  181. "item_id" => $item_id,
  182. "addtime" => time(),
  183. "level" => 2
  184. );
  185. D("Catalog")->add($add_data);
  186. $cat_name_array = D("Catalog")->where(" item_id = '$item_id' and level = 2 and cat_name = '%s' ",array($cat_name))->find();
  187. }
  188. }
  189. //如果传送了三级目录
  190. if ($cat_name_sub) {
  191. $cat_name_sub_array = D("Catalog")->where(" item_id = '$item_id' and level = 3 and cat_name = '%s' ",array($cat_name_sub))->find();
  192. //如果不存在则新建
  193. if (!$cat_name_sub_array) {
  194. $add_data = array(
  195. "cat_name" => $cat_name_sub,
  196. "item_id" => $item_id,
  197. "parent_cat_id" => $cat_name_array['cat_id'],
  198. "addtime" => time(),
  199. "level" => 3
  200. );
  201. D("Catalog")->add($add_data);
  202. $cat_name_sub_array = D("Catalog")->where(" item_id = '$item_id' and level = 3 and cat_name = '%s' ",array($cat_name_sub))->find();
  203. }
  204. }
  205. //目录id
  206. $cat_id = 0 ;
  207. if ($cat_name_array && $cat_name_array['cat_id'] > 0 ) {
  208. $cat_id = $cat_name_array['cat_id'] ;
  209. }
  210. if ($cat_name_sub_array && $cat_name_sub_array['cat_id'] > 0 ) {
  211. $cat_id = $cat_name_sub_array['cat_id'] ;
  212. }
  213. if ($page_content) {
  214. $page_array = D("Page")->where(" item_id = '$item_id' and cat_id = '$cat_id' and page_title ='%s' ",array($page_title))->find();
  215. //如果不存在则新建
  216. if (!$page_array) {
  217. $add_data = array(
  218. "author_username" => "from_api",
  219. "item_id" => $item_id,
  220. "cat_id" => $cat_id,
  221. "page_title" => $page_title,
  222. "page_content" => $page_content,
  223. "s_number" => $s_number,
  224. "addtime" => time(),
  225. );
  226. $page_id = D("Page")->add($add_data);
  227. }else{
  228. $page_id = $page_array['page_id'] ;
  229. $update_data = array(
  230. "author_username" => "from_api",
  231. "item_id" => $item_id,
  232. "cat_id" => $cat_id,
  233. "page_title" => $page_title,
  234. "page_content" => $page_content,
  235. "s_number" => $s_number,
  236. );
  237. D("Page")->where(" page_id = '$page_id' ")->save($update_data);
  238. }
  239. }
  240. if ($page_id) {
  241. $ret = D("Page")->where(" page_id = '$page_id' ")->find();
  242. $this->sendResult($ret);
  243. }else{
  244. $this->sendError(10101);
  245. }
  246. }
  247. //置顶项目
  248. public function top(){
  249. $login_user = $this->checkLogin();
  250. $item_id = I("item_id/d");
  251. $action = I("action");
  252. if ($action == 'top') {
  253. $ret = D("ItemTop")->add(array("item_id"=>$item_id,"uid"=>$login_user['uid'],"addtime"=>time()));
  254. }
  255. elseif ($action == 'cancel') {
  256. $ret = D("ItemTop")->where(" uid = '$login_user[uid]' and item_id = '$item_id' ")->delete();
  257. }
  258. if ($ret) {
  259. $this->sendResult(array());
  260. }else{
  261. $this->sendError(10101);
  262. }
  263. }
  264. //验证访问密码
  265. public function pwd(){
  266. $item_id = I("item_id/d");
  267. $password = I("password");
  268. $v_code = I("v_code");
  269. $refer_url = I('refer_url');
  270. //检查用户输错密码的次数。如果超过一定次数,则需要验证 验证码
  271. $key= 'item_pwd_fail_times_'.$item_id;
  272. if(!D("VerifyCode")->_check_times($key,10)){
  273. if (!$v_code || $v_code != session('v_code')) {
  274. $this->sendError(10206,L('verification_code_are_incorrect'));
  275. return;
  276. }
  277. }
  278. $item = D("Item")->where("item_id = '$item_id' ")->find();
  279. if ($item['password'] == $password) {
  280. session("visit_item_".$item_id , 1 );
  281. $this->sendResult(array("refer_url"=>base64_decode($refer_url)));
  282. }else{
  283. D("VerifyCode")->_ins_times($key);//输错密码则设置输错次数
  284. if(D("VerifyCode")->_check_times($key,10)){
  285. $error_code = 10307 ;
  286. }else{
  287. $error_code = 10308 ;
  288. }
  289. $this->sendError($error_code,L('access_password_are_incorrect'));
  290. }
  291. }
  292. }