PageRenderTime 35ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/phpmyfaq/admin/ajax.autosave.php

https://github.com/cyrke/phpMyFAQ
PHP | 163 lines | 116 code | 29 blank | 18 comment | 30 complexity | b3a148a293da0b06f124f6320353062e MD5 | raw file
Possible License(s): LGPL-2.1, LGPL-3.0, MPL-2.0-no-copyleft-exception
  1. <?php
  2. /**
  3. * Autosave handler.
  4. *
  5. * PHP Version 5.3
  6. *
  7. * This Source Code Form is subject to the terms of the Mozilla Public License,
  8. * v. 2.0. If a copy of the MPL was not distributed with this file, You can
  9. * obtain one at http://mozilla.org/MPL/2.0/.
  10. *
  11. * @category phpMyFAQ
  12. * @package Administration
  13. * @author Anatoliy Belsky <ab@php.net>
  14. * @copyright 2003-2012 phpMyFAQ Team
  15. * @license http://www.mozilla.org/MPL/2.0/ Mozilla Public License Version 2.0
  16. * @link http://www.phpmyfaq.de
  17. * @since 2012-07-07
  18. */
  19. if (!defined('IS_VALID_PHPMYFAQ')) {
  20. header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']));
  21. exit();
  22. }
  23. $do = PMF_Filter::filterInput(INPUT_GET, 'do', FILTER_SANITIZE_STRING);
  24. if ('insertentry' == $do && ($permission['editbt']|| $permission['addbt']) ||
  25. 'saveentry' == $do && $permission['editbt']) {
  26. $user = PMF_User_CurrentUser::getFromSession($faqConfig);
  27. $dateStart = PMF_Filter::filterInput(INPUT_POST, 'dateStart', FILTER_SANITIZE_STRING);
  28. $dateEnd = PMF_Filter::filterInput(INPUT_POST, 'dateEnd', FILTER_SANITIZE_STRING);
  29. $question = PMF_Filter::filterInput(INPUT_POST, 'question', FILTER_SANITIZE_STRING);
  30. $categories = PMF_Filter::filterInputArray(INPUT_POST, array('rubrik' => array('filter' => FILTER_VALIDATE_INT,
  31. 'flags' => FILTER_REQUIRE_ARRAY)));
  32. $record_lang = PMF_Filter::filterInput(INPUT_POST, 'lang', FILTER_SANITIZE_STRING);
  33. $tags = PMF_Filter::filterInput(INPUT_POST, 'tags', FILTER_SANITIZE_STRING);
  34. $active = PMF_Filter::filterInput(INPUT_POST, 'active', FILTER_SANITIZE_STRING);
  35. $sticky = PMF_Filter::filterInput(INPUT_POST, 'sticky', FILTER_SANITIZE_STRING);
  36. $content = PMF_Filter::filterInput(INPUT_POST, 'answer', FILTER_SANITIZE_SPECIAL_CHARS);
  37. $keywords = PMF_Filter::filterInput(INPUT_POST, 'keywords', FILTER_SANITIZE_STRING);
  38. $author = PMF_Filter::filterInput(INPUT_POST, 'author', FILTER_SANITIZE_STRING);
  39. $email = PMF_Filter::filterInput(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
  40. $comment = PMF_Filter::filterInput(INPUT_POST, 'comment', FILTER_SANITIZE_STRING);
  41. $record_id = PMF_Filter::filterInput(INPUT_POST, 'record_id', FILTER_VALIDATE_INT);
  42. $solution_id = PMF_Filter::filterInput(INPUT_POST, 'solution_id', FILTER_VALIDATE_INT);
  43. $revision_id = PMF_Filter::filterInput(INPUT_POST, 'revision_id', FILTER_VALIDATE_INT);
  44. $changed = PMF_Filter::filterInput(INPUT_POST, 'changed', FILTER_SANITIZE_STRING);
  45. $user_permission = PMF_Filter::filterInput(INPUT_POST, 'userpermission', FILTER_SANITIZE_STRING);
  46. $restricted_users = ('all' == $user_permission) ? -1 : PMF_Filter::filterInput(INPUT_POST, 'restricted_users', FILTER_VALIDATE_INT);
  47. $group_permission = PMF_Filter::filterInput(INPUT_POST, 'grouppermission', FILTER_SANITIZE_STRING);
  48. $restricted_groups = ('all' == $group_permission) ? -1 : PMF_Filter::filterInput(INPUT_POST, 'restricted_groups', FILTER_VALIDATE_INT);
  49. if (!is_null($question) && !is_null($categories)) {
  50. $tagging = new PMF_Tags($faqConfig);
  51. $category = new PMF_Category($faqConfig, false);
  52. $category->setUser($currentAdminUser);
  53. $category->setGroups($currentAdminGroups);
  54. if (!isset($categories['rubrik'])) {
  55. $categories['rubrik'] = array();
  56. }
  57. $recordData = array(
  58. 'id' => $record_id,
  59. 'lang' => $record_lang,
  60. 'revision_id' => $revision_id,
  61. 'active' => $active,
  62. 'sticky' => (!is_null($sticky) ? 1 : 0),
  63. 'thema' => html_entity_decode($question),
  64. 'content' => html_entity_decode($content),
  65. 'keywords' => $keywords,
  66. 'author' => $author,
  67. 'email' => $email,
  68. 'comment' => (!is_null($comment) ? 'y' : 'n'),
  69. 'date' => empty($date) ? date('YmdHis') : str_replace(array('-', ':', ' '), '', $date),
  70. 'dateStart' => (empty($dateStart) ? '00000000000000' : str_replace('-', '', $dateStart) . '000000'),
  71. 'dateEnd' => (empty($dateEnd) ? '99991231235959' : str_replace('-', '', $dateEnd) . '235959'),
  72. 'linkState' => '',
  73. 'linkDateCheck' => 0
  74. );
  75. if ('saveentry' == $do || $record_id) {
  76. /* Create a revision anyway, it's autosaving */
  77. $faq->addNewRevision($record_id, $record_lang);
  78. $revision_id++;
  79. $faq->createChangeEntry($record_id, $user->getUserId(), nl2br($changed), $record_lang, $revision_id);
  80. $visits = new PMF_Visits($faqConfig);
  81. $visits->add($record_id);
  82. if ($faq->isAlreadyTranslated($record_id, $record_lang)) {
  83. $faq->updateRecord($recordData);
  84. } else {
  85. $record_id = $faq->addRecord($recordData, false);
  86. }
  87. $faq->deleteCategoryRelations($record_id, $record_lang);
  88. $faq->addCategoryRelations($categories['rubrik'], $record_id, $record_lang);
  89. if ($tags != '') {
  90. $tagging->saveTags($record_id, explode(',', $tags));
  91. } else {
  92. $tagging->deleteTagsFromRecordId($record_id);
  93. }
  94. $faq->deletePermission('user', $record_id);
  95. $faq->addPermission('user', $record_id, $restricted_users);
  96. $category->deletePermission('user', $categories['rubrik']);
  97. $category->addPermission('user', $categories['rubrik'], $restricted_users);
  98. if ($faqConfig->get('security.permLevel') != 'basic') {
  99. $faq->deletePermission('group', $record_id);
  100. $faq->addPermission('group', $record_id, $restricted_groups);
  101. $category->deletePermission('group', $categories['rubrik']);
  102. $category->addPermission('group', $categories['rubrik'], $restricted_groups);
  103. }
  104. } else if ('insertentry' == $do) {
  105. unset($recordData['id']);
  106. unset($recordData['revision_id']);
  107. $revision_id = 1;
  108. $record_id = $faq->addRecord($recordData);
  109. if ($record_id) {
  110. $faq->createChangeEntry($record_id, $user->getUserId(), nl2br($changed), $recordData['lang']);
  111. $visits = new PMF_Visits($faqConfig);
  112. $visits->add($record_id);
  113. $faq->addCategoryRelations($categories['rubrik'], $record_id, $recordData['lang']);
  114. if ($tags != '') {
  115. $tagging->saveTags($record_id, explode(',',$tags));
  116. }
  117. $faq->addPermission('user', $record_id, $restricted_users);
  118. $category->addPermission('user', $categories['rubrik'], $restricted_users);
  119. if ($faqConfig->get('security.permLevel') != 'basic') {
  120. $faq->addPermission('group', $record_id, $restricted_groups);
  121. $category->addPermission('group', $categories['rubrik'], $restricted_groups);
  122. }
  123. }
  124. }
  125. $out = array(
  126. 'msg' => sprintf("Item autosaved at revision %d", $revision_id),
  127. 'revision_id' => $revision_id,
  128. 'record_id' => $record_id,
  129. );
  130. print json_encode($out);
  131. }
  132. } else {
  133. print json_encode(array("msg" => "Unsuficcient article rights"));
  134. }