BxDolWikiQuery.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaCore UNA Core
  7. * @{
  8. */
  9. /**
  10. * Database queries for WIKI objects.
  11. * @see BxDolWiki
  12. */
  13. class BxDolWikiQuery extends BxDolDb
  14. {
  15. protected $_aObject;
  16. public function __construct($aObject)
  17. {
  18. parent::__construct();
  19. $this->_aObject = $aObject;
  20. }
  21. static public function getWikiObjectByUri ($sUri)
  22. {
  23. return self::getWikiObjectByField ('uri', $sUri);
  24. }
  25. static public function getWikiObject ($sObject)
  26. {
  27. return self::getWikiObjectByField ('object', $sObject);
  28. }
  29. static public function getWikiObjectByField ($sField, $sValue)
  30. {
  31. $oDb = BxDolDb::getInstance();
  32. $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_wiki` WHERE `$sField` = ?", $sValue);
  33. $aObject = $oDb->getRow($sQuery);
  34. if (!$aObject || !is_array($aObject))
  35. return false;
  36. return $aObject;
  37. }
  38. /**
  39. * Get wiki block
  40. * @param $iBlockId block ID
  41. * @param $sLang 2 letters language code
  42. * @param $iRevision [optional, default false] revision number, if false get latest revision for then given lan
  43. * @param $bAutoMainLang [optional, default true] automatically load wiki block for main language if translation for gived language doesn't exist
  44. * @return array with wiki block info
  45. */
  46. public function getBlockContent ($iBlockId, $sLang, $iRevision = false, $bAutoMainLang = true)
  47. {
  48. $sWhere = '';
  49. $aBind = array('block' => $iBlockId, 'lang' => $sLang);
  50. if (false !== $iRevision) {
  51. $sWhere = " AND `revision` = :rev";
  52. $aBind['rev'] = $iRevision;
  53. }
  54. // get latest revision for specific language
  55. $aRow = $this->getRow("SELECT `block_id`, `revision`, `profile_id`, `lang`, `main_lang`, `content`, `unsafe`, `notes`, `added` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `lang` = :lang $sWhere ORDER BY `revision` DESC LIMIT 1", $aBind);
  56. // if translation isn't found for specific language then get latest revision for main language
  57. if ($bAutoMainLang && !$aRow) {
  58. unset($aBind['lang']);
  59. $aRow = $this->getRow("SELECT `block_id`, `revision`, `profile_id`, `lang`, `main_lang`, `content`, `unsafe`, `notes`, `added` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `main_lang` = 1 $sWhere ORDER BY `revision` DESC LIMIT 1", $aBind);
  60. }
  61. return $aRow ? $aRow : false;
  62. }
  63. public function getBlockHistory ($iBlockId, $sLang)
  64. {
  65. $aBind = array('block' => $iBlockId, 'lang' => $sLang);
  66. return $this->getAll("SELECT `block_id`, `lang`, `revision`, `profile_id`, `notes`, `added` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `lang` = :lang ORDER BY `revision` DESC", $aBind);
  67. }
  68. public function deleteRevisions ($iBlockId, $sLang, $aRevisions)
  69. {
  70. $aBind = array('block' => $iBlockId, 'lang' => $sLang);
  71. $i = $this->query("DELETE FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `lang` = :lang AND `revision` IN(" . $this->implode_escape($aRevisions) . ")", $aBind);
  72. if ($i) {
  73. // check if main language revisions was deleted
  74. $aRow = $this->getOne("SELECT `block_id` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `main_lang` = 1 LIMIT 1", array('block' => $iBlockId));
  75. if (!$aRow) {
  76. // if main lang was deleted then mark latest translation from any lang as main
  77. $this->query("UPDATE `sys_pages_wiki_blocks` SET `main_lang` = 1 WHERE `block_id` = :block ORDER BY `added` DESC LIMIT 1", array('block' => $iBlockId));
  78. }
  79. }
  80. return $i;
  81. }
  82. public static function deleteAllRevisions ($mixedBlockIds)
  83. {
  84. $oDb = BxDolDb::getInstance();
  85. if (!is_array($mixedBlockIds))
  86. $mixedBlockId = array($mixedBlockIds);
  87. return $oDb->query("DELETE FROM `sys_pages_wiki_blocks` WHERE `block_id` IN(" . $oDb->implode_escape($mixedBlockIds) . ")");
  88. }
  89. }
  90. /** @} */