PageRenderTime 38ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/commcenter/commlib.php

https://gitlab.com/ElvisAns/tiki
PHP | 392 lines | 335 code | 49 blank | 8 comment | 27 complexity | 2d9ba9d6ed40a106e9e4f059162dcbf0 MD5 | raw file
  1. <?php
  2. // (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
  3. //
  4. // All Rights Reserved. See copyright.txt for details and a complete list of authors.
  5. // Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
  6. // $Id$
  7. //this script may only be included - so its better to die if called directly.
  8. if (strpos($_SERVER["SCRIPT_NAME"], basename(__FILE__)) !== false) {
  9. header("location: index.php");
  10. exit;
  11. }
  12. class CommLib extends TikiLib
  13. {
  14. public function accept_page($receivedPageId)
  15. {
  16. $info = $this->get_received_page($receivedPageId);
  17. if ($info['structureName'] == $info['pageName']) {
  18. $tikilib = TikiLib::lib('tiki');
  19. $structlib = TikiLib::lib('struct');
  20. $pages = $tikilib->list_received_pages(0, -1, 'pageName_asc', '', 's', $info['structureName']);
  21. foreach ($pages['data'] as $page) {
  22. $names[] = $page['pageName'];
  23. }
  24. if (empty($names)) {
  25. return true;
  26. }
  27. $query = "select count(*) from `tiki_pages` where `pageName` in (" . implode(',', array_fill(0, count($names), '?')) . ")";
  28. if ($this->getOne($query, $names)) {
  29. return false;
  30. }
  31. foreach ($pages['data'] as $key => $page) {
  32. $parent_id = null;
  33. $after_ref_id = 0;
  34. if ($page['parentName']) {
  35. foreach ($pages['data'] as $p) {
  36. if ($p['pageName'] == $page['parentName']) {
  37. $parent_id = $p['page_ref_id'];
  38. }
  39. if ($p['pageName'] == $page['pageName']) {
  40. break;
  41. }
  42. if ($p['parentName'] == $page['parentName']) {
  43. $after_ref_id = $p['page_ref_id'];
  44. }
  45. }
  46. }
  47. if ($parent_id) {
  48. $this->create_page(
  49. $page['pageName'],
  50. 0,
  51. $page['data'],
  52. $this->now,
  53. $page['comment'],
  54. $page['receivedFromUser'],
  55. $page['receivedFromSite'],
  56. $page['description']
  57. );
  58. }
  59. $pages['data'][$key]['page_ref_id'] = $structlib->s_create_page($parent_id, $after_ref_id, $page['pageName'], $page['page_alias']);
  60. if (! $parent_id) {
  61. $this->update_page(
  62. $page['pageName'],
  63. $page['data'],
  64. $page['comment'],
  65. $page['receivedFromUser'],
  66. $page['receivedFromSite'],
  67. $page['description'],
  68. true
  69. );
  70. }
  71. }
  72. $query = "delete from `tiki_received_pages` where `structureName`=?";
  73. $this->query($query, $info['structureName']);
  74. } elseif (empty($info['structureName'])) {
  75. if ($this->page_exists($info["pageName"])) {
  76. return false;
  77. }
  78. $this->create_page(
  79. $info["pageName"],
  80. 0,
  81. $info["data"],
  82. $this->now,
  83. $info["comment"],
  84. $info["receivedFromUser"],
  85. $info["receivedFromSite"],
  86. $info["description"]
  87. );
  88. $query = "delete from `tiki_received_pages` where `receivedPageId`=?";
  89. $this->query($query, [(int)$receivedPageId]);
  90. }
  91. return true;
  92. }
  93. public function accept_article($receivedArticleId, $topic)
  94. {
  95. $artlib = TikiLib::lib('art');
  96. $info = $this->get_received_article($receivedArticleId);
  97. $artlib->replace_article(
  98. $info["title"],
  99. $info["authorName"],
  100. $topic,
  101. $info["useImage"],
  102. $info["image_name"],
  103. $info["image_size"],
  104. $info["image_type"],
  105. $info["image_data"],
  106. $info["heading"],
  107. $info["body"],
  108. $info["publishDate"],
  109. $info["expireDate"],
  110. $info["author"],
  111. 0,
  112. $info["image_x"],
  113. $info["image_y"],
  114. $info["type"],
  115. $info["rating"]
  116. );
  117. $query = "delete from `tiki_received_articles` where `receivedArticleId`=?";
  118. $result = $this->query($query, [(int)$receivedArticleId]);
  119. return true;
  120. }
  121. public function list_received_articles($offset, $maxRecords, $sort_mode = 'publishDate_desc', $find = '')
  122. {
  123. $bindvars = [];
  124. if ($find) {
  125. $findesc = '%' . $find . '%';
  126. $mid = " where (`heading` like ? or `title` like ? or `body` like ?)";
  127. $bindvars[] = $findesc;
  128. $bindvars[] = $findesc;
  129. } else {
  130. $mid = "";
  131. }
  132. $query = "select * from `tiki_received_articles` $mid order by " . $this->convertSortMode($sort_mode);
  133. $query_cant = "select count(*) from `tiki_received_articles` $mid";
  134. $result = $this->query($query, $bindvars, $maxRecords, $offset);
  135. $cant = $this->getOne($query_cant, $bindvars);
  136. $ret = [];
  137. while ($res = $result->fetchRow()) {
  138. $ret[] = $res;
  139. }
  140. $retval = [];
  141. $retval["data"] = $ret;
  142. $retval["cant"] = $cant;
  143. return $retval;
  144. }
  145. public function remove_received_page($receivedPageId)
  146. {
  147. $info = $this->get_received_page($receivedPageId);
  148. if ($info['structureName'] == $info['pageName']) {
  149. $query = "delete from `tiki_received_pages` where `structureName`=?";
  150. $this->query($query, [$info['structureName']]);
  151. } elseif (empty($info['structureName'])) {
  152. $query = "delete from `tiki_received_pages` where `receivedPageId`=?";
  153. $this->query($query, [(int)$receivedPageId]);
  154. }
  155. }
  156. public function remove_received_article($receivedArticleId)
  157. {
  158. $query = "delete from `tiki_received_articles` where `receivedArticleId`=?";
  159. $result = $this->query($query, [(int)$receivedArticleId]);
  160. }
  161. public function get_received_page($receivedPageId)
  162. {
  163. $query = "select * from `tiki_received_pages` where `receivedPageId`=?";
  164. $result = $this->query($query, [(int)$receivedPageId]);
  165. if (! $result->numRows()) {
  166. return false;
  167. }
  168. $res = $result->fetchRow();
  169. return $res;
  170. }
  171. public function get_received_article($receivedArticleId)
  172. {
  173. $query = "select * from `tiki_received_articles` where `receivedArticleId`=?";
  174. $result = $this->query($query, [(int)$receivedArticleId]);
  175. if (! $result->numRows()) {
  176. return false;
  177. }
  178. $res = $result->fetchRow();
  179. return $res;
  180. }
  181. public function update_received_article(
  182. $receivedArticleId,
  183. $title,
  184. $authorName,
  185. $useImage,
  186. $image_x,
  187. $image_y,
  188. $publishDate,
  189. $expireDate,
  190. $heading,
  191. $body,
  192. $type,
  193. $rating
  194. ) {
  195. $size = strlen($body);
  196. $hash = md5($title . $heading . $body);
  197. $query = "update `tiki_received_articles` set `title`=?, `authorName`=?, `heading`=?, `body`=?, `size`=?, `hash`=?, `useImage`=?, `image_x`=?, ";
  198. $query .= " `image_y`=?, `publishDate`=?, `expireDate`=?, `type`=?, `rating`=? where `receivedArticleId`=?";
  199. $result = $this->query(
  200. $query,
  201. [
  202. $title,
  203. $authorName,
  204. $heading,
  205. $body,
  206. (int)$size,
  207. $hash,
  208. $useImage,
  209. (int)$image_x,
  210. (int)$image_y,
  211. (int)$publishDate,
  212. $expireDate,
  213. $type,
  214. (int)$rating,
  215. (int)$receivedArticleId
  216. ]
  217. );
  218. }
  219. public function update_received_page($receivedPageId, $pageName, $data, $comment)
  220. {
  221. $info = $this->get_received_page($receivedPageId);
  222. if ($info['pageName'] != $pageName && ! empty($info['structureName'])) {
  223. if ($info['pageName'] == $info['structureName']) {
  224. $query = "update `tiki_received_pages` set `structureName`=? where `structureName`=?";
  225. $this->query($query, [$pageName, $info['pageName']]);
  226. }
  227. $query = "update `tiki_received_pages` set `parentName`=? where `parentName`=?";
  228. $this->query($query, [$pageName, $info['pageName']]);
  229. }
  230. $query = "update `tiki_received_pages` set `pageName`=?, `data`=?, `comment`=? where `receivedPageId`=?";
  231. $this->query($query, [$pageName, $data, $comment, (int)$receivedPageId]);
  232. }
  233. public function receive_article(
  234. $site,
  235. $user,
  236. $title,
  237. $authorName,
  238. $size,
  239. $use_image,
  240. $image_name,
  241. $image_type,
  242. $image_size,
  243. $image_x,
  244. $image_y,
  245. $image_data,
  246. $publishDate,
  247. $expireDate,
  248. $created,
  249. $heading,
  250. $body,
  251. $hash,
  252. $author,
  253. $type,
  254. $rating
  255. ) {
  256. $query = "delete from `tiki_received_articles` where `title`=? and `receivedFromsite`=? and `receivedFromUser`=?";
  257. $result = $this->query($query, [$title, $site, $user]);
  258. $query = "insert into `tiki_received_articles`(`receivedDate`,`receivedFromSite`," .
  259. " `receivedFromUser`,`title`,`authorName`,`size`, `useImage`,`image_name`," .
  260. " `image_type`,`image_size`,`image_x`,`image_y`,`image_data`,`publishDate`," .
  261. " `expireDate`,`created`,`heading`,`body`,`hash`,`author`,`type`,`rating`) "
  262. ;
  263. $query .= " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  264. $result = $this->query(
  265. $query,
  266. [
  267. (int)$this->now,
  268. $site,
  269. $user,
  270. $title,
  271. $authorName,
  272. (int)$size,
  273. $use_image,
  274. $image_name,
  275. $image_type,
  276. $image_size,
  277. $image_x,
  278. $image_y,
  279. $image_data,
  280. (int)$publishDate,
  281. (int)$expireDate,
  282. (int)$created,
  283. $heading,
  284. $body,
  285. $hash,
  286. $author,
  287. $type,
  288. (int)$rating
  289. ]
  290. );
  291. }
  292. public function receive_page($pageName, $data, $comment, $site, $user, $description)
  293. {
  294. // Remove previous page sent from the same site-user (an update)
  295. $query = "delete from `tiki_received_pages` where `pageName`=? and `receivedFromsite`=? and `receivedFromUser`=? and `structureName`=?";
  296. $result = $this->query($query, [$pageName, $site, $user, '']);
  297. // Now insert the page
  298. $query = "insert into `tiki_received_pages`(`pageName`,`data`,`comment`,`receivedFromSite`," .
  299. " `receivedFromUser`, `receivedDate`,`description`) values(?,?,?,?,?,?,?)";
  300. $result = $this->query($query, [$pageName, $data, $comment, $site, $user, (int)$this->now, $description]);
  301. }
  302. public function receive_structure_page($pageName, $data, $comment, $site, $user, $description, $structureName, $parentName, $pos, $alias)
  303. {
  304. global $tikilib;
  305. $query = "delete from `tiki_received_pages` where `pageName`=? and `receivedFromsite`=? and `receivedFromUser`=? and `structureName`=?";
  306. $this->query($query, [$pageName, $site, $user, $structureName]);
  307. $query = "insert into `tiki_received_pages` (`pageName`,`data`,`comment`,`receivedFromSite`," .
  308. " `receivedFromUser`, `receivedDate`,`description`,`structureName`, `parentName`," .
  309. " `page_alias`, `pos`) values(?,?,?,?,?,?,?,?,?,?,?)";
  310. $this->query(
  311. $query,
  312. [
  313. $pageName,
  314. $data,
  315. $comment,
  316. $site,
  317. $user,
  318. (int)$tikilib->now,
  319. $description,
  320. $structureName,
  321. $parentName,
  322. $alias,
  323. $pos
  324. ]
  325. );
  326. }
  327. public function rename_structure_pages($pages, $prefix, $postfix)
  328. {
  329. $bindvars[] = $prefix;
  330. $bindvars[] = $postfix;
  331. $bindvars = array_merge($bindvars, $pages);
  332. $query = 'update `tiki_received_pages` set `pageName`= concat(?,`pageName`,?) where `pageName` in (' .
  333. implode(',', array_fill(0, count($pages), '?')) . ")";
  334. $this->query($query, $bindvars);
  335. $query = 'update `tiki_received_pages` set `parentName`= concat(?,`parentName`,?) where `parentName` in (' .
  336. implode(',', array_fill(0, count($pages), '?')) . ")";
  337. $this->query($query, $bindvars);
  338. $query = 'update `tiki_received_pages` set `structureName`= concat(?,`structureName`,?) where `structureName` in (' .
  339. implode(',', array_fill(0, count($pages), '?')) . ")";
  340. $this->query($query, $bindvars);
  341. }
  342. }
  343. $commlib = new CommLib();