PageRenderTime 27ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/api/rest/page.php

https://gitlab.com/x33n/respond
PHP | 1684 lines | 863 code | 474 blank | 347 comment | 183 complexity | d7acb283b62f326a0b95cdf52ef7c77c MD5 | raw file
  1. <?php
  2. /**
  3. * A protected API call to add a page
  4. * @uri /page/add
  5. */
  6. class PageAddResource extends Tonic\Resource {
  7. /**
  8. * @method POST
  9. */
  10. function add() {
  11. // get token
  12. $token = Utilities::ValidateJWTToken(apache_request_headers());
  13. // check if token is not null
  14. if($token != NULL){
  15. // get a reference to the site, user
  16. $site = Site::GetBySiteId($token->SiteId);
  17. $user = User::GetByUserId($token->UserId);
  18. // creates an access object
  19. $access = Utilities::SetAccess($user);
  20. parse_str($this->request->data, $request); // parse request
  21. // get request paramters
  22. $pageTypeId = $request['pageTypeId'];
  23. $name = $request['name'];
  24. $friendlyId = $request['friendlyId'];
  25. $description = $request['description'];
  26. // check permissions
  27. if(Utilities::CanPerformAction($pageTypeId, $access['CanCreate']) == false){
  28. return new Tonic\Response(Tonic\Response::BADREQUEST);
  29. }
  30. // default layout and stylesheet is content
  31. $layout = 'content';
  32. $stylesheet = 'content';
  33. if($pageTypeId != '-1'){
  34. $pageType = PageType::GetByPageTypeId($pageTypeId);
  35. if($pageType != null){
  36. $pageTypeId = $pageType['PageTypeId'];
  37. $layout = $pageType['Layout'];
  38. $stylesheet = $pageType['Stylesheet'];
  39. }
  40. }
  41. // add page
  42. $page = Page::Add($friendlyId, $name, $description, $layout, $stylesheet, $pageTypeId, $token->SiteId, $token->UserId);
  43. $fullName = $user['FirstName'].' '.$user['LastName'];
  44. $row['LastModifiedFullName'] = $fullName;
  45. // init url
  46. $url = $page['FriendlyId'];
  47. // init PT
  48. $pageType = NULL;
  49. // get url, permissions
  50. if($page['PageTypeId']!=-1){
  51. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  52. if($pageType != NULL){
  53. $url = strtolower($pageType['FriendlyId']).'/'.$page['FriendlyId'];
  54. // set edit permissions
  55. if($access['CanEdit']=='All' || strpos($access['CanEdit'], $pageType['PageTypeId']) !== FALSE){
  56. $canEdit = true;
  57. }
  58. // set publish permissions
  59. if($access['CanPublish']=='All' || strpos($access['CanPublish'], $pageType['PageTypeId']) !== FALSE){
  60. $canPublish = true;
  61. }
  62. // set remove permissions
  63. if($access['CanRemove']=='All' || strpos($access['CanRemove'], $pageType['PageTypeId']) !== FALSE){
  64. $canRemove = true;
  65. }
  66. }
  67. }
  68. else{
  69. // set edit permissions
  70. if($access['CanEdit']=='All' || strpos($access['CanEdit'], 'root') !== FALSE){
  71. $canEdit = true;
  72. }
  73. // set publish permissions
  74. if($access['CanPublish']=='All' || strpos($access['CanPublish'], 'root') !== FALSE){
  75. $canPublish = true;
  76. }
  77. // set remove permissions
  78. if($access['CanRemove']=='All' || strpos($access['CanRemove'], 'root') !== FALSE){
  79. $canRemove = true;
  80. }
  81. }
  82. // init
  83. $imageURL = '';
  84. $thumbURL = '';
  85. // get thumb url
  86. if($page['Image']!=''){
  87. // set images URL
  88. if(FILES_ON_S3 == true){
  89. $bucket = $site['Bucket'];
  90. $imagesURL = str_replace('{{bucket}}', $bucket, S3_URL);
  91. $imagesURL = str_replace('{{site}}', $site['FriendlyId'], $imagesURL);
  92. }
  93. else{
  94. $imagesURL = $site['Domain'];
  95. }
  96. $thumbURL = $imagesURL.'/files/thumbs/'.$page['Image'];
  97. $imageURL = $imagesURL.'/files/'.$page['Image'];
  98. }
  99. $page['Image'] = $imageURL;
  100. $page['Thumb'] = $thumbURL;
  101. // set permissions
  102. $page['CanEdit'] = $canEdit;
  103. $page['CanPublish'] = $canPublish;
  104. $page['CanRemove'] = $canRemove;
  105. // set url
  106. $page['Url'] = $url;
  107. // no drafts on new page
  108. $page['HasDraft'] = false;
  109. // return a json response
  110. $response = new Tonic\Response(Tonic\Response::OK);
  111. $response->contentType = 'application/json';
  112. $response->body = json_encode($page);
  113. return $response;
  114. } else{ // unauthorized access
  115. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  116. }
  117. }
  118. }
  119. /**
  120. * A protected API call to add a page
  121. * @uri /page/edit/tags
  122. */
  123. class PageEditTagsResource extends Tonic\Resource {
  124. /**
  125. * @method POST
  126. */
  127. function post() {
  128. // get token
  129. $token = Utilities::ValidateJWTToken(apache_request_headers());
  130. // check if token is not null
  131. if($token != NULL){
  132. $user = User::GetByUserId($token->UserId);
  133. // creates an access object
  134. $access = Utilities::SetAccess($user);
  135. parse_str($this->request->data, $request); // parse request
  136. $pageId = $request['pageId'];
  137. $tags = $request['tags'];
  138. // get page
  139. $page = Page::GetByPageId($pageId);
  140. // check permissions
  141. if(Utilities::CanPerformAction($page['PageTypeId'], $access['CanEdit']) == false){
  142. return new Tonic\Response(Tonic\Response::BADREQUEST);
  143. }
  144. $page = Page::EditTags($pageId, $tags, $token->UserId);
  145. // return a json response
  146. $response = new Tonic\Response(Tonic\Response::OK);
  147. $response->contentType = 'application/json';
  148. $response->body = json_encode($page);
  149. return $response;
  150. } else{ // unauthorized access
  151. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  152. }
  153. }
  154. }
  155. /**
  156. * A protected API call to remove a page
  157. * @uri /page/remove
  158. */
  159. class PageRemoveResource extends Tonic\Resource {
  160. /**
  161. * @method POST
  162. */
  163. function post() {
  164. // get token
  165. $token = Utilities::ValidateJWTToken(apache_request_headers());
  166. // check if token is not null
  167. if($token != NULL){
  168. $user = User::GetByUserId($token->UserId);
  169. $site = Site::GetBySiteId($token->SiteId);
  170. // creates an access object
  171. $access = Utilities::SetAccess($user);
  172. parse_str($this->request->data, $request); // parse request
  173. $pageId = $request['pageId'];
  174. $page = Page::GetByPageId($pageId);
  175. // check permissions
  176. if(Utilities::CanPerformAction($page['PageTypeId'], $access['CanEdit']) == false){
  177. return new Tonic\Response(Tonic\Response::BADREQUEST);
  178. }
  179. // make sure page is part of the site
  180. if($page['SiteId']==$site['SiteId']){
  181. // get file location
  182. $path = SITES_LOCATION.'/'.$site['FriendlyId'].'/';
  183. $static_path = SITES_LOCATION.'/'.$site['FriendlyId'].'/';
  184. // default is root
  185. $pageTypeId = -1;
  186. // set file
  187. $file = $page['FriendlyId'].'.html';
  188. // set file
  189. if($page['PageTypeId'] != -1){
  190. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  191. if($pageType != NULL){
  192. $pageTypeId = $pageType['PageTypeId'];
  193. $file = $pageType['FriendlyId'].'.'.$page['FriendlyId'].'.html';
  194. $static_path = $static_file.$pageType['FriendlyId'].'/';
  195. }
  196. }
  197. // check permissions
  198. if(Utilities::CanPerformAction($pageTypeId, $access['CanRemove']) == false){
  199. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  200. }
  201. // set template
  202. $template = $path.'templates/page/'.$file;
  203. // remove template
  204. if(file_exists($template)){
  205. unlink($template);
  206. }
  207. $static_file = $static_path.$file;
  208. // remove static file if it exists
  209. if(file_exists($static_file)){
  210. unlink($static_file);
  211. }
  212. // remove page from the DB
  213. Page::Remove($pageId);
  214. return new Tonic\Response(Tonic\Response::OK);
  215. }
  216. else{
  217. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  218. }
  219. }
  220. else{
  221. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  222. }
  223. }
  224. }
  225. /**
  226. * A protected API call to publish a page
  227. * @uri /page/publish
  228. */
  229. class PagePublishResource extends Tonic\Resource {
  230. /**
  231. * @method POST
  232. */
  233. function publish() {
  234. // get token
  235. $token = Utilities::ValidateJWTToken(apache_request_headers());
  236. // check if token is not null
  237. if($token != NULL){
  238. $user = User::GetByUserId($token->UserId);
  239. // creates an access object
  240. $access = Utilities::SetAccess($user);
  241. parse_str($this->request->data, $request); // parse request
  242. $pageId = $request['pageId'];
  243. // get page
  244. $page = Page::GetByPageId($pageId);
  245. // make sure the user is part of the site (or is a superadmin)
  246. if($token->SiteId != $page['SiteId']){
  247. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  248. }
  249. // default is root
  250. $pageTypeId = -1;
  251. // determine if file is in sub-direcotry
  252. if($page['PageTypeId']!=-1){
  253. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  254. // set page type
  255. $pageTypeId = $pageType['PageTypeId'];
  256. }
  257. // check permissions
  258. if(Utilities::CanPerformAction($pageTypeId, $access['CanPublish']) == false){
  259. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  260. }
  261. // set the page to active
  262. Page::SetIsActive($pageId, 1);
  263. // publish the page
  264. Publish::PublishPage($pageId);
  265. // return a json response
  266. $response = new Tonic\Response(Tonic\Response::OK);
  267. } else{ // unauthorized access
  268. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  269. }
  270. }
  271. }
  272. /**
  273. * A protected API call to un-publish a page
  274. * @uri /page/unpublish
  275. */
  276. class PageUnPublishResource extends Tonic\Resource {
  277. /**
  278. * @method POST
  279. */
  280. function unpublish() {
  281. // get token
  282. $token = Utilities::ValidateJWTToken(apache_request_headers());
  283. // check if token is not null
  284. if($token != NULL){
  285. $user = User::GetByUserId($token->UserId);
  286. // creates an access object
  287. $access = Utilities::SetAccess($user);
  288. parse_str($this->request->data, $request); // parse request
  289. $pageId = $request['pageId'];
  290. // get page
  291. $page = Page::GetByPageId($pageId);
  292. // make sure the user is part of the site (or is a superadmin)
  293. if($user['SiteId'] != $page['SiteId']){
  294. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  295. }
  296. // delete page
  297. $site = Site::GetBySiteId($page['SiteId']);
  298. $filename = '../sites/'.$site['FriendlyId'].'/';
  299. // default is root
  300. $pageTypeId = -1;
  301. // get $pageTypeId
  302. if($page['PageTypeId']!=-1){
  303. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  304. $filename .= strtolower($pageType['FriendlyId']).'/';
  305. $pageTypeId = $pageType['PageTypeId'];
  306. }
  307. // check permissions
  308. if(Utilities::CanPerformAction($pageTypeId, $access['CanPublish']) == false){
  309. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  310. }
  311. // set active
  312. Page::SetIsActive($pageId, 0);
  313. // remove file
  314. $filename = $filename.$page['FriendlyId'].'.php';
  315. if(file_exists($filename)){
  316. unlink($filename);
  317. }
  318. // return a json response
  319. $response = new Tonic\Response(Tonic\Response::OK);
  320. } else{ // unauthorized access
  321. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  322. }
  323. }
  324. }
  325. /**
  326. * A protected API call to edit, delete an existing page
  327. * @uri /page/retrieve
  328. */
  329. class PageRetrieveResource extends Tonic\Resource {
  330. /**
  331. * @method POST
  332. */
  333. function post() {
  334. // get token
  335. $token = Utilities::ValidateJWTToken(apache_request_headers());
  336. // check if token is not null
  337. if($token != NULL){
  338. $user = User::GetByUserId($token->UserId);
  339. // creates an access object
  340. $access = Utilities::SetAccess($user);
  341. // parse request
  342. parse_str($this->request->data, $request);
  343. // get request params
  344. $pageId = $request['pageId'];
  345. // get page
  346. $page = Page::GetByPageId($pageId);
  347. // make sure the user is part of the site (or is a superadmin)
  348. if($user['SiteId'] != $page['SiteId']){
  349. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  350. }
  351. // get site
  352. $site = Site::GetBySiteId($page['SiteId']);
  353. // url
  354. $page['Url'] = $page['FriendlyId'];
  355. // default permissions
  356. $canEdit = false;
  357. $canPublish = false;
  358. $canRemove = false;
  359. // set file
  360. $file = $page['FriendlyId'];
  361. // get the page type
  362. if($page['PageTypeId']!=-1){
  363. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  364. $page['Url'] = $pageType['FriendlyId'].'/'.$page['FriendlyId'];
  365. $file = $pageType['FriendlyId'].'.'.$page['FriendlyId'];
  366. // get permissions for the page
  367. $canEdit = Utilities::CanPerformAction($pageType['PageTypeId'], $access['CanEdit']);
  368. $canPublish = Utilities::CanPerformAction($pageType['PageTypeId'], $access['CanPublish']);
  369. $canRemove = Utilities::CanPerformAction($pageType['PageTypeId'], $access['CanRemove']);
  370. }
  371. else{
  372. // get permissions for the page
  373. $canEdit = Utilities::CanPerformAction('root', $access['CanEdit']);
  374. $canPublish = Utilities::CanPerformAction('root', $access['CanPublish']);
  375. $canRemove = Utilities::CanPerformAction('root', $access['CanRemove']);
  376. }
  377. $hasDraft = false;
  378. if($page['Draft'] != NULL){
  379. $hasDraft = true;
  380. }
  381. $page['HasDraft'] = $hasDraft;
  382. // set permissions
  383. $page['CanEdit'] = $canEdit;
  384. $page['CanPublish'] = $canPublish;
  385. $page['CanRemove'] = $canRemove;
  386. // return a json response
  387. $response = new Tonic\Response(Tonic\Response::OK);
  388. $response->contentType = 'application/json';
  389. $response->body = json_encode($page);
  390. return $response;
  391. }
  392. else{
  393. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  394. }
  395. }
  396. }
  397. /**
  398. * A protected API call to get and save content for a page
  399. * @uri /page/save
  400. */
  401. class PageSaveResource extends Tonic\Resource {
  402. /**
  403. * @method POST
  404. */
  405. function update() {
  406. // get token
  407. $token = Utilities::ValidateJWTToken(apache_request_headers());
  408. // check if token is not null
  409. if($token != NULL){
  410. $user = User::GetByUserId($token->UserId);
  411. $site = Site::GetBySiteId($token->SiteId);
  412. // creates an access object
  413. $access = Utilities::SetAccess($user);
  414. parse_str($this->request->data, $request); // parse request
  415. // get request params
  416. $pageId = $request['pageId'];
  417. $name = $request['name'];
  418. $friendlyId = $request['friendlyId'];
  419. $description = $request['description'];
  420. $keywords = $request['keywords'];
  421. $callout = $request['callout'];
  422. $layout = $request['layout'];
  423. $stylesheet = $request['stylesheet'];
  424. $includeOnly = $request['includeOnly'];
  425. $beginDate = $request['beginDate'];
  426. $endDate = $request['endDate'];
  427. $location = $request['location'];
  428. $latitude = $request['latitude'];
  429. $longitude = $request['longitude'];
  430. // set timezone
  431. $timeZone = $site['TimeZone'];
  432. // default is a root element
  433. $pageTypeId = -1;
  434. // get a reference to a page
  435. $page = Page::GetByPageId($pageId);
  436. // make sure the user is part of the site (or is a superadmin)
  437. if($token->SiteId != $page['SiteId']){
  438. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  439. }
  440. // get a pagetypeId
  441. if($page['PageTypeId']!=-1){
  442. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  443. $pageTypeId = $pageType['PageTypeId'];
  444. }
  445. // get permissions (both publishers and editors can save settings)
  446. $canEdit = Utilities::CanPerformAction($pageTypeId, $access['CanEdit']);
  447. $canPublish = Utilities::CanPerformAction($pageTypeId, $access['CanPublish']);
  448. // check permissions
  449. if($canEdit == false && $canPublish == false){
  450. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  451. }
  452. // edits settings
  453. Page::EditSettings($pageId, $name, $friendlyId, $description, $keywords, $callout,
  454. $beginDate, $endDate, $timeZone,
  455. $location, $latitude, $longitude,
  456. $layout, $stylesheet, $includeOnly, $token->UserId);
  457. return new Tonic\Response(Tonic\Response::OK);
  458. } else{ // unauthorized access
  459. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  460. }
  461. return new Tonic\Response(Tonic\Response::NOTIMPLEMENTED);
  462. }
  463. }
  464. /**
  465. * A protected API call to get and save content for a page
  466. * @uri /page/content/retrieve
  467. */
  468. class PageContentRetrieveResource extends Tonic\Resource {
  469. /**
  470. * @method POST
  471. */
  472. function post() {
  473. // get token
  474. $token = Utilities::ValidateJWTToken(apache_request_headers());
  475. // check if token is not null
  476. if($token != NULL){
  477. $site = Site::GetBySiteId($token->SiteId);
  478. $user = User::GetByUserId($token->UserId);
  479. // creates an access object
  480. $access = Utilities::SetAccess($user);
  481. // parse request
  482. parse_str($this->request->data, $request);
  483. // get request params
  484. $pageId = $request['pageId'];
  485. // get page
  486. $page = Page::GetByPageId($pageId);
  487. // set file
  488. $file = $page['FriendlyId'].'.html';
  489. // set file
  490. if($page['PageTypeId'] != -1){
  491. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  492. if($pageType != NULL){
  493. $file = $pageType['FriendlyId'].'.'.$page['FriendlyId'].'.html';
  494. }
  495. }
  496. // retrieve a draft if available, if not retrieve the content or default content
  497. $content = '';
  498. if($page['Draft'] != NULL){
  499. $content = $page['Draft'];
  500. }
  501. else if($page['Content'] != NULL){
  502. $content = $page['Content'];
  503. }
  504. else{
  505. $content = '<div id="block-1" class="block row"><div class="col col-md-12"><h1>'.strip_tags(html_entity_decode($page['Name'])).'</h1><p>'.strip_tags(html_entity_decode($page['Description'])).'</p></div></div>';
  506. }
  507. $response = new Tonic\Response(Tonic\Response::OK);
  508. $response->contentType = 'text/html';
  509. $response->body = $content;
  510. return $response;
  511. } else{ // unauthorized access
  512. return new Tonic\Response(Tonic\Response::BADREQUEST);
  513. }
  514. }
  515. }
  516. /**
  517. * A protected API call to get and save content for a page
  518. * @uri /page/content/save
  519. */
  520. class PageContentSaveResource extends Tonic\Resource {
  521. /**
  522. * @method POST
  523. */
  524. function post() {
  525. // get token
  526. $token = Utilities::ValidateJWTToken(apache_request_headers());
  527. // check if token is not null
  528. if($token != NULL){
  529. $site = Site::GetBySiteId($token->SiteId);
  530. $user = User::GetByUserId($token->UserId);
  531. // creates an access object
  532. $access = Utilities::SetAccess($user);
  533. parse_str($this->request->data, $request); // parse request
  534. $pageId = $request['pageId'];
  535. $content = $request['content'];
  536. $status = $request['status']; // draft or publish
  537. $image = $request['image'];
  538. // get page and site
  539. $page = Page::GetByPageId($pageId);
  540. // default is root
  541. $pageTypeId = -1;
  542. $pageType = NULL;
  543. // determine if file is in sub-direcotry
  544. if($page['PageTypeId']!=-1){
  545. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  546. // set page type
  547. $pageTypeId = $pageType['PageTypeId'];
  548. }
  549. // get permissions
  550. $canEdit = Utilities::CanPerformAction($pageTypeId, $access['CanEdit']);
  551. $canPublish = Utilities::CanPerformAction($pageTypeId, $access['CanPublish']);
  552. // check permissions
  553. if($canEdit == false && $canPublish == false){
  554. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  555. }
  556. // save content
  557. if($status=='publish'){
  558. Page::EditContent($pageId, $content, $token->UserId);
  559. }
  560. else{ // save draft
  561. Page::EditDraft($pageId, $content, $token->UserId);
  562. }
  563. $url = '';
  564. // publish if status is set to publish and the user can publish
  565. if($status=='publish' && $canPublish == true){
  566. // set active
  567. Page::SetIsActive($page['PageId'], 1);
  568. // publish page
  569. $url = Publish::PublishPage($page['PageId'], false, true);
  570. // edit image
  571. Page::EditImage($page['PageId'], $image, $token->UserId);
  572. // if page is include only, republish content
  573. if($page['IncludeOnly'] == 1){
  574. Publish::PublishContent($page['SiteId']);
  575. }
  576. }
  577. // return successful response
  578. $response = new Tonic\Response(Tonic\Response::OK);
  579. $response->contentType = 'text/html';
  580. $response->body = $url;
  581. return $response;
  582. } else{ // unauthorized access
  583. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  584. }
  585. }
  586. }
  587. /**
  588. * A protected API call to get and save content for a page
  589. * @uri /page/content/revert
  590. */
  591. class PageContentRevert extends Tonic\Resource {
  592. /**
  593. * @method POST
  594. */
  595. function post() {
  596. // get token
  597. $token = Utilities::ValidateJWTToken(apache_request_headers());
  598. // check if token is not null
  599. if($token != NULL){
  600. $site = Site::GetBySiteId($token->SiteId);
  601. $user = User::GetByUserId($token->UserId);
  602. // creates an access object
  603. $access = Utilities::SetAccess($user);
  604. parse_str($this->request->data, $request); // parse request
  605. // get page id
  606. $pageId = $request['pageId'];
  607. // get page and site
  608. $page = Page::GetByPageId($pageId);
  609. // default is root
  610. $pageTypeId = $page['PageTypeId'];
  611. // get permissions
  612. $canEdit = Utilities::CanPerformAction($pageTypeId, $access['CanEdit']);
  613. $canPublish = Utilities::CanPerformAction($pageTypeId, $access['CanPublish']);
  614. // check permissions
  615. if($canEdit == false && $canPublish == false){
  616. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  617. }
  618. // removes the draft for the page
  619. Publish::RemoveDraft($pageId);
  620. // return successful response
  621. return new Tonic\Response(Tonic\Response::OK);
  622. } else{ // unauthorized access
  623. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  624. }
  625. }
  626. }
  627. /**
  628. * A protected API call to generate a preview
  629. * @uri /page/content/preview
  630. */
  631. class PageContentPreviewResource extends Tonic\Resource {
  632. /**
  633. * @method POST
  634. */
  635. function post() {
  636. // get token
  637. $token = Utilities::ValidateJWTToken(apache_request_headers());
  638. // check if token is not null
  639. if($token != NULL){
  640. // get user
  641. $user = User::GetByUserId($token->UserId);
  642. $site = Site::GetBySiteId($token->SiteId);
  643. // creates an access object
  644. $access = Utilities::SetAccess($user);
  645. parse_str($this->request->data, $request); // parse request
  646. $pageId = $request['pageId']; // get page type
  647. $content = $request['content']; // get page type
  648. $status = 'draft';
  649. // get page and site
  650. $page = Page::GetByPageId($pageId);
  651. // make sure the user is part of the site (or is a superadmin)
  652. if($user['SiteId'] != $page['SiteId']){
  653. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  654. }
  655. // default is root
  656. $pageTypeId = -1;
  657. $pageType = NULL;
  658. // determine if file is in sub-direcotry
  659. if($page['PageTypeId']!=-1){
  660. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  661. // set page type
  662. $pageTypeId = $pageType['PageTypeId'];
  663. }
  664. // get permissions
  665. $canEdit = Utilities::CanPerformAction($pageTypeId, $access['CanEdit']);
  666. $canPublish = Utilities::CanPerformAction($pageTypeId, $access['CanPublish']);
  667. // check permissions to save a draft
  668. if($canEdit == true || $canPublish == true){
  669. // create a preview
  670. $url = Publish::PublishPage($page['PageId'], true);
  671. }
  672. // strip leading '../' from string
  673. $url = str_replace('../', '', $url);
  674. $response = new Tonic\Response(Tonic\Response::OK);
  675. $response->contentType = 'text/html';
  676. $response->body = $url;
  677. return $response;
  678. } else{ // unauthorized access
  679. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  680. }
  681. }
  682. }
  683. /**
  684. * A protected API call to remove files in the preview folder
  685. * @uri /page/content/preview/remove
  686. */
  687. class PagePreviewRemoveResource extends Tonic\Resource {
  688. /**
  689. * @method DELETE
  690. */
  691. function remove() {
  692. // get token
  693. $token = Utilities::ValidateJWTToken(apache_request_headers());
  694. // check if token is not null
  695. if($token != NULL){
  696. // only can remove preview files from own site
  697. $site = Site::GetBySiteId($token->SiteId);
  698. if($site){
  699. $dir = SITES_LOCATION.'/'.$site['FriendlyId'].'/preview/*';
  700. $files = glob($dir); // get all file names
  701. foreach($files as $file){ // iterate files
  702. if(is_file($file))
  703. unlink($file); // delete file
  704. }
  705. }
  706. return new Tonic\Response(Tonic\Response::OK);
  707. } else{ // unauthorized access
  708. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  709. }
  710. }
  711. }
  712. /**
  713. * A protected API call to get and save content for a page
  714. * @uri /page/image/swap
  715. */
  716. class PageImageResource extends Tonic\Resource {
  717. /**
  718. * @method POST
  719. */
  720. function save() {
  721. // get token
  722. $token = Utilities::ValidateJWTToken(apache_request_headers());
  723. // check if token is not null
  724. if($token != NULL){
  725. parse_str($this->request->data, $request); // parse request
  726. $fromUrl = $request['fromUrl']; // get page type
  727. $toUrl = $request['toUrl']; // draft or publish
  728. $image_data = file_get_contents($fromUrl);
  729. file_put_contents($toUrl, $image_data);
  730. return new Tonic\Response(Tonic\Response::OK);
  731. }
  732. }
  733. }
  734. /**
  735. * A protected API call that shows all pages
  736. * @uri /page/list/all
  737. */
  738. class PageListAll extends Tonic\Resource {
  739. /**
  740. * @method GET
  741. */
  742. function get() {
  743. // get token
  744. $token = Utilities::ValidateJWTToken(apache_request_headers());
  745. // check if token is not null
  746. if($token != NULL){
  747. // get pages
  748. $list = Page::GetPagesForSite($token->SiteId, true);
  749. // get site
  750. $site = Site::GetBySiteId($token->SiteId);
  751. $pages = array();
  752. foreach ($list as $row){
  753. $fullName = $row['FirstName'].' '.$row['LastName'];
  754. $row['LastModifiedFullName'] = $fullName;
  755. // init
  756. $imageURL = '';
  757. $thumbURL = '';
  758. // get thumb url
  759. if($row['Image']!=''){
  760. // set images URL
  761. if(FILES_ON_S3 == true){
  762. $bucket = $site['Bucket'];
  763. $imagesURL = str_replace('{{bucket}}', $bucket, S3_URL);
  764. $imagesURL = str_replace('{{site}}', $site['FriendlyId'], $imagesURL);
  765. }
  766. else{
  767. $imagesURL = $site['Domain'];
  768. }
  769. $thumbURL = $imagesURL.'/files/thumbs/'.$row['Image'];
  770. $imageURL = $imagesURL.'/files/'.$row['Image'];
  771. };
  772. $row['Image'] = $imageURL;
  773. $row['Thumb'] = $thumbURL;
  774. $url = $row['FriendlyId'];
  775. if($row['PageTypeId']!=-1){
  776. $pageType = PageType::GetByPageTypeId($row['PageTypeId']);
  777. $url = strtolower($pageType['FriendlyId']).'/'.$row['FriendlyId'];
  778. }
  779. $row['Url'] = $url;
  780. // permissions are not applicable to this API call
  781. $row['CanEdit'] = '';
  782. $row['CanPublish'] = '';
  783. $row['CanRemove'] = '';
  784. $pages[$row['PageId']] = $row;
  785. }
  786. // return a json response
  787. $response = new Tonic\Response(Tonic\Response::OK);
  788. $response->contentType = 'application/json';
  789. $response->body = json_encode($pages);
  790. return $response;
  791. }
  792. else{ // unauthorized access
  793. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  794. }
  795. }
  796. }
  797. /**
  798. * A protected API call that shows all pages
  799. * @uri /page/list/allowed
  800. */
  801. class PageListAllowed extends Tonic\Resource {
  802. /**
  803. * @method GET
  804. */
  805. function get() {
  806. // get token
  807. $token = Utilities::ValidateJWTToken(apache_request_headers());
  808. // check if token is not null
  809. if($token != NULL){
  810. // get a reference to the site
  811. $site = Site::GetBySiteId($token->SiteId);
  812. $user = User::GetByUserId($token->UserId);
  813. // creates an access object
  814. $access = Utilities::SetAccess($user);
  815. // get pages
  816. $list = Page::GetPagesForSite($token->SiteId, false);
  817. $pages = array();
  818. foreach ($list as $row){
  819. $fullName = $row['FirstName'].' '.$row['LastName'];
  820. $row['LastModifiedFullName'] = $fullName;
  821. // init url
  822. $url = $row['FriendlyId'];
  823. // initialize PT
  824. $pageType = NULL;
  825. $canEdit = false;
  826. $canPublish = false;
  827. $canRemove = false;
  828. // get url, permissions
  829. if($row['PageTypeId']!=-1){
  830. $pageType = PageType::GetByPageTypeId($row['PageTypeId']);
  831. $url = strtolower($pageType['FriendlyId']).'/'.$row['FriendlyId'];
  832. // set edit permissions
  833. if($access['CanEdit']=='All' || strpos($access['CanEdit'], $pageType['PageTypeId']) !== FALSE){
  834. $canEdit = true;
  835. }
  836. // set publish permissions
  837. if($access['CanPublish']=='All' || strpos($access['CanPublish'], $pageType['PageTypeId']) !== FALSE){
  838. $canPublish = true;
  839. }
  840. // set remove permissions
  841. if($access['CanRemove']=='All' || strpos($access['CanRemove'], $pageType['PageTypeId']) !== FALSE){
  842. $canRemove = true;
  843. }
  844. }
  845. else{
  846. // set edit permissions
  847. if($access['CanEdit']=='All' || strpos($access['CanEdit'], 'root') !== FALSE){
  848. $canEdit = true;
  849. }
  850. // set publish permissions
  851. if($access['CanPublish']=='All' || strpos($access['CanPublish'], 'root') !== FALSE){
  852. $canPublish = true;
  853. }
  854. // set remove permissions
  855. if($access['CanRemove']=='All' || strpos($access['CanRemove'], 'root') !== FALSE){
  856. $canRemove = true;
  857. }
  858. }
  859. // init
  860. $imageURL = '';
  861. $thumbURL = '';
  862. // get thumb url
  863. if($row['Image'] != ''){
  864. // set images URL
  865. if(FILES_ON_S3 == true){
  866. $bucket = $site['Bucket'];
  867. $imagesURL = str_replace('{{bucket}}', $bucket, S3_URL);
  868. $imagesURL = str_replace('{{site}}', $site['FriendlyId'], $imagesURL);
  869. }
  870. else{
  871. $imagesURL = $site['Domain'];
  872. }
  873. $thumbURL = $imagesURL.'/files/thumbs/'.$row['Image'];
  874. $imageURL = $imagesURL.'/files/'.$row['Image'];
  875. };
  876. $row['Image'] = $imageURL;
  877. $row['Thumb'] = $thumbURL;
  878. // set permissions
  879. $row['CanEdit'] = $canEdit;
  880. $row['CanPublish'] = $canPublish;
  881. $row['CanRemove'] = $canRemove;
  882. // set url
  883. $row['Url'] = $url;
  884. $hasDraft = false;
  885. if($row['Draft'] != NULL){
  886. $hasDraft = true;
  887. }
  888. $row['HasDraft'] = $hasDraft;
  889. // push to array
  890. array_push($pages, $row);
  891. }
  892. // return a json response
  893. $response = new Tonic\Response(Tonic\Response::OK);
  894. $response->contentType = 'application/json';
  895. $response->body = json_encode($pages);
  896. return $response;
  897. }
  898. else{ // unauthorized access
  899. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  900. }
  901. }
  902. }
  903. /**
  904. * A protected API call that shows all pages for a given PageType.FriendlyId
  905. * @uri /page/list/sorted
  906. */
  907. class PageListSortedResource extends Tonic\Resource {
  908. /**
  909. * @method POST
  910. */
  911. function post() {
  912. // get token
  913. $token = Utilities::ValidateJWTToken(apache_request_headers());
  914. // check if token is not null
  915. if($token != NULL){
  916. // get a reference to the site
  917. $site = Site::GetBySiteId($token->SiteId);
  918. $user = User::GetByUserId($token->UserId);
  919. // creates an access object
  920. $access = Utilities::SetAccess($user);
  921. parse_str($this->request->data, $request); // parse request
  922. $friendlyId = $request['friendlyId']; // get page type
  923. $sort = $request['sort'];
  924. // default
  925. $orderBy = 'LastModifiedDate DESC';
  926. // don't pass directly to DB
  927. if($sort=='date desc'){
  928. $orderBy = 'LastModifiedDate DESC';
  929. }
  930. if($sort=='date asc'){
  931. $orderBy = 'LastModified ASC';
  932. }
  933. if($sort=='name desc'){
  934. $orderBy = 'Name DESC';
  935. }
  936. if($sort=='name asc'){
  937. $orderBy = 'Name ASC';
  938. }
  939. $siteId = $token->SiteId;
  940. $pageSize = 100;
  941. $page = 0;
  942. $pageTypeId = -1;
  943. $dir = '/';
  944. if($friendlyId!='root'){ // get pagetype
  945. $pageType = PageType::GetByFriendlyId($friendlyId, $siteId);
  946. $pageTypeId = $pageType['PageTypeId'];
  947. $dir = strtolower($pageType['FriendlyId']).'/';
  948. }
  949. // get pages
  950. $list = Page::GetPages($siteId, $pageTypeId, $pageSize, $page, $orderBy);
  951. $pages = array();
  952. foreach ($list as $row){
  953. $page = Page::GetByPageId($row['PageId']);
  954. $fullName = $row['FirstName'].' '.$row['LastName'];
  955. $page['LastModifiedFullName'] = $fullName;
  956. $thumbUrl = '';
  957. if($page['Image']!=''){
  958. $thumbUrl = '/files/thumbs/'.$page['Image'];
  959. }
  960. $page['Thumb'] = $thumbUrl;
  961. $url = $page['FriendlyId'];
  962. // default permissions
  963. $canEdit = false;
  964. $canPublish = false;
  965. $canRemove = false;
  966. // initialize PT
  967. $pageType = NULL;
  968. if($page['PageTypeId']!=-1){
  969. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  970. $url = strtolower($pageType['FriendlyId']).'/'.$page['FriendlyId'];
  971. // set edit permissions
  972. if($access['CanEdit']=='All' || strpos($access['CanEdit'], $pageType['PageTypeId']) !== FALSE){
  973. $canEdit = true;
  974. }
  975. // set publish permissions
  976. if($access['CanPublish']=='All' || strpos($access['CanPublish'], $pageType['PageTypeId']) !== FALSE){
  977. $canPublish = true;
  978. }
  979. // set remove permissions
  980. if($access['CanRemove']=='All' || strpos($access['CanRemove'], $pageType['PageTypeId']) !== FALSE){
  981. $canRemove = true;
  982. }
  983. }
  984. else{
  985. // set edit permissions
  986. if($access['CanEdit']=='All' || strpos($access['CanEdit'], 'root') !== FALSE){
  987. $canEdit = true;
  988. }
  989. // set publish permissions
  990. if($access['CanPublish']=='All' || strpos($access['CanPublish'], 'root') !== FALSE){
  991. $canPublish = true;
  992. }
  993. // set remove permissions
  994. if($access['CanRemove']=='All' || strpos($access['CanRemove'], 'root') !== FALSE){
  995. $canRemove = true;
  996. }
  997. }
  998. $page['CanEdit'] = $canEdit;
  999. $page['CanPublish'] = $canPublish;
  1000. $page['CanRemove'] = $canRemove;
  1001. $page['Url'] = $url;
  1002. $hasDraft = false;
  1003. if($page['Draft'] != NULL){
  1004. $hasDraft = true;
  1005. }
  1006. $page['HasDraft'] = $hasDraft;
  1007. $pages[$row['PageId']] = $page;
  1008. }
  1009. // return a json response
  1010. $response = new Tonic\Response(Tonic\Response::OK);
  1011. $response->contentType = 'application/json';
  1012. $response->body = json_encode($pages);
  1013. return $response;
  1014. }
  1015. else{ // unauthorized access
  1016. return new Tonic\Response(Tonic\Response::BADREQUEST);
  1017. }
  1018. }
  1019. }
  1020. /**
  1021. * A protected API call that shows all pages for a given PageType.FriendlyId
  1022. * @uri /page/list/{friendlyId}
  1023. */
  1024. class PageListFriendlyResource extends Tonic\Resource {
  1025. /**
  1026. * @method GET
  1027. */
  1028. function get($friendlyId) {
  1029. // get token
  1030. $token = Utilities::ValidateJWTToken(apache_request_headers());
  1031. // check if token is not null
  1032. if($token != NULL){
  1033. // get a reference to the site
  1034. $site = Site::GetBySiteId($token->SiteId);
  1035. $siteId = $token->SiteId;
  1036. $pageSize = 100;
  1037. $orderBy = 'Created DESC';
  1038. $page = 0;
  1039. $pageTypeId = -1;
  1040. $dir = '/';
  1041. if($friendlyId!='root'){ // get pagetype
  1042. $pageType = PageType::GetByFriendlyId($friendlyId, $siteId);
  1043. $pageTypeId = $pageType['PageTypeId'];
  1044. $dir = strtolower($pageType['FriendlyId']).'/';
  1045. }
  1046. // get pages
  1047. $list = Page::GetPages($siteId, $pageTypeId, $pageSize, $page, $orderBy);
  1048. $pages = array();
  1049. foreach ($list as $row){
  1050. $page = Page::GetByPageId($row['PageId']);
  1051. $fullName = $row['FirstName'].' '.$row['LastName'];
  1052. $page['LastModifiedFullName'] = $fullName;
  1053. $thumbUrl = '';
  1054. if($page['Image']!=''){
  1055. $thumbUrl = '/files/thumbs/'.$page['Image'];
  1056. }
  1057. // set thumb
  1058. $page['Thumb'] = $thumbUrl;
  1059. $url = $page['FriendlyId'];
  1060. if($page['PageTypeId']!=-1){
  1061. $pageType = PageType::GetByPageTypeId($page['PageTypeId']);
  1062. $url = strtolower($pageType['FriendlyId']).'/'.$page['FriendlyId'];
  1063. }
  1064. // set url
  1065. $page['Url'] = $url;
  1066. // permissions are not applicable to this API call
  1067. $page['CanEdit'] = '';
  1068. $page['CanPublish'] = '';
  1069. $page['CanRemove'] = '';
  1070. $pages[$row['PageId']] = $page;
  1071. }
  1072. // return a json response
  1073. $response = new Tonic\Response(Tonic\Response::OK);
  1074. $response->contentType = 'application/json';
  1075. $response->body = json_encode($pages);
  1076. return $response;
  1077. }
  1078. else{ // unauthorized access
  1079. return new Tonic\Response(Tonic\Response::UNAUTHORIZED);
  1080. }
  1081. }
  1082. }
  1083. /**
  1084. * This is a public API call that shows you the list of pages for the specified parameters in a list format
  1085. * @uri /page/published/list
  1086. */
  1087. class PageListResource extends Tonic\Resource {
  1088. /**
  1089. * @method POST
  1090. */
  1091. function post() {
  1092. parse_str($this->request->data, $request); // parse request
  1093. $siteId = $request['siteId'];
  1094. $friendlyId = $request['type'];
  1095. $pageSize = $request['pagesize'];
  1096. $orderBy = $request['orderby'];
  1097. $current= $request['current'];
  1098. // get language
  1099. $language = 'en';
  1100. // set order
  1101. if($orderBy=='Created' || $orderBy=='BeginDate'){
  1102. $orderBy = 'Pages.'.$orderBy.' DESC';
  1103. }
  1104. else{
  1105. $orderBy = 'Pages.'.$orderBy.' ASC';
  1106. }
  1107. if($pageSize==''){
  1108. $pageSize = 10;
  1109. }
  1110. $site = Site::GetBySiteId($siteId);
  1111. $pageType = PageType::GetByFriendlyId($friendlyId, $siteId);
  1112. $list = Page::GetPages($site['SiteId'], $pageType['PageTypeId'], $pageSize, $current, $orderBy, true);
  1113. $pages = array();
  1114. foreach ($list as $row){
  1115. $page = Page::GetByPageId($row['PageId']);
  1116. $name = $row['FirstName'].' '.$row['LastName'];
  1117. // get image url
  1118. $thumbUrl = '';
  1119. $imageUrl = '';
  1120. $hasImage = false;
  1121. if($page['Image']!=''){
  1122. $hasImage = true;
  1123. $thumbUrl = 'files/thumbs/'.$page['Image'];
  1124. $imageUrl = 'files/'.substr($page['Image'], 2);
  1125. }
  1126. // check for callout
  1127. $hasCallout = false;
  1128. if($page['Callout']!=''){
  1129. $hasCallout = true;
  1130. }
  1131. // build URL
  1132. $url = strtolower($pageType['FriendlyId']).'/'.$page['FriendlyId'];
  1133. $beginDate = null;
  1134. $beginReadable = '';
  1135. if($page['BeginDate'] != null){
  1136. // create a readable begin date
  1137. $begin = DateTime::createFromFormat('Y-m-d H:i:s', $page['BeginDate']);
  1138. $local = new DateTimeZone($site['TimeZone']);
  1139. $begin->setTimezone($local);
  1140. $beginReadable = $begin->format('D, M d y h:i a');
  1141. $beginDate = $begin->format('Y-m-d H:i:s');
  1142. }
  1143. $endDate = null;
  1144. $endReadable = '';
  1145. if($page['EndDate'] != null){
  1146. // create a readable end date
  1147. $end = DateTime::createFromFormat('Y-m-d H:i:s', $page['EndDate']);
  1148. $local = new DateTimeZone($site['TimeZone']);
  1149. $end->setTimezone($local);
  1150. $endReadable = $end->format('D, M d y h:i a');
  1151. $endDate = $end->format('Y-m-d H:i:s');
  1152. }
  1153. $item = array(
  1154. 'PageId' => $page['PageId'],
  1155. 'Name' => $page['Name'], // get a translation for name, description, and callout
  1156. 'Description' => $page['Description'],
  1157. 'Callout' => $page['Callout'],
  1158. 'Location' => $page['Location'],
  1159. 'LatLong' => $page['LatLong'],
  1160. 'HasCallout' => $hasCallout,
  1161. 'Url' => $url,
  1162. 'Image' => $imageUrl,
  1163. 'Thumb' => $thumbUrl,
  1164. 'HasImage' => $hasImage,
  1165. 'BeginDate' => $beginDate,
  1166. 'BeginDateReadable' => $beginReadable,
  1167. 'EndDate' => $endDate,
  1168. 'EndDateReadable' => $endReadable,
  1169. 'LastModified' => $page['LastModifiedDate'],
  1170. 'Author' => $name,
  1171. 'FirstName' => $row['FirstName'],
  1172. 'LastName' => $row['LastName'],
  1173. 'Photo' => $row['PhotoUrl'],
  1174. 'Tags' => $page['Tags']
  1175. );
  1176. array_push($pages, $item);
  1177. }
  1178. // return a json response
  1179. $response = new Tonic\Response(Tonic\Response::OK);
  1180. $response->contentType = 'applicaton/json';
  1181. $response->body = json_encode($pages);
  1182. return $response;
  1183. return new Tonic\Response(Tonic\Response::CREATED);
  1184. }
  1185. }
  1186. /**
  1187. * This is a public API call that shows you the list of pages for the specified parameters in a list format
  1188. * @uri /page/published/count
  1189. */
  1190. class PagePublishedCountResource extends Tonic\Resource {
  1191. /**
  1192. * @method POST
  1193. */
  1194. function post() {
  1195. parse_str($this->request->data, $request); // parse request
  1196. $siteId = $request['siteId'];
  1197. $friendlyId = $request['type'];
  1198. // get pagetype
  1199. $pageType = PageType::GetByFriendlyId($friendlyId, $siteId);
  1200. // get a count
  1201. $count = Page::GetPagesCount($siteId, $pageType['PageTypeId'], true);
  1202. // return a json response
  1203. $response = new Tonic\Response(Tonic\Response::OK);
  1204. $response->contentType = 'applicaton/json';
  1205. $response->body = '{"count":'.$count.'}';
  1206. return $response;
  1207. return new Tonic\Response(Tonic\Response::CREATED);
  1208. }
  1209. }
  1210. ?>