BxDolImageTranscoderQuery.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. /**
  3. * @package Dolphin Core
  4. * @copyright Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  5. * @license CC-BY - http://creativecommons.org/licenses/by/3.0/
  6. */
  7. defined('BX_DOL') or die('hack attempt');
  8. bx_import('BxDolDb');
  9. /**
  10. * @see BxDolImageTranscoder
  11. */
  12. class BxDolImageTranscoderQuery extends BxDolDb {
  13. protected $_aObject;
  14. public function BxDolImageTranscoderQuery($aObject) {
  15. parent::BxDolDb();
  16. $this->_aObject = $aObject;
  17. }
  18. static public function getTranscoderObject ($sObject) {
  19. $oDb = BxDolDb::getInstance();
  20. $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_transcoder_images` WHERE `object` = ?", $sObject);
  21. return $oDb->getRow($sQuery);
  22. }
  23. static public function getTranscoderObjects () {
  24. $oDb = BxDolDb::getInstance();
  25. $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_transcoder_images`");
  26. return $oDb->getAll($sQuery);
  27. }
  28. public function getTranscoderFilters () {
  29. $sQuery = $this->prepare("SELECT * FROM `sys_transcoder_images_filters` WHERE `transcoder_object` = ? ORDER BY `order` ASC", $this->_aObject['object']);
  30. return $this->getAll($sQuery);
  31. }
  32. public function updateHandler ($iFileId, $mixedHandler) {
  33. $sUpdateATime = '';
  34. if ($this->_aObject['atime_tracking']) {
  35. $iTime = time();
  36. $sUpdateATime = $this->prepare(", `atime` = ?", $iTime);
  37. }
  38. $sQuery = $this->prepare("INSERT INTO `sys_transcoder_images_files` SET `transcoder_object` = ?, `file_id` = ?, `handler` = ? $sUpdateATime
  39. ON DUPLICATE KEY UPDATE `file_id` = ? $sUpdateATime", $this->_aObject['object'], $iFileId, $mixedHandler, $iFileId);
  40. return $this->res($sQuery);
  41. }
  42. public function getFileIdByHandler ($mixedHandler) {
  43. $sQuery = $this->prepare("SELECT `file_id` FROM `sys_transcoder_images_files` WHERE `transcoder_object` = ? AND `handler` = ?", $this->_aObject['object'], $mixedHandler);
  44. return $this->getOne($sQuery);
  45. }
  46. public function updateAccessTime($mixedHandler) {
  47. $iTime = time();
  48. $sQuery = $this->prepare("UPDATE `sys_transcoder_images_files` SET `atime` = ? WHERE `transcoder_object` = ? AND `handler` = ?", $iTime, $this->_aObject['object'], $mixedHandler);
  49. return $this->res($sQuery);
  50. }
  51. public function deleteFileTraces($iFileId) {
  52. $sQuery = $this->prepare("DELETE FROM `sys_transcoder_images_files` WHERE `transcoder_object` = ? AND `file_id` = ?", $this->_aObject['object'], $iFileId);
  53. return $this->res($sQuery);
  54. }
  55. public function getFilesForPruning () {
  56. if (!$this->_aObject['atime_tracking'] || !$this->_aObject['atime_pruning'])
  57. continue;
  58. $sQuery = $this->prepare("SELECT * FROM `sys_transcoder_images_files` WHERE `transcoder_object` = ? AND `atime` != 0 AND `atime` < ?", $this->_aObject['object'], time() - $this->_aObject['atime_pruning']);
  59. return $this->getAll($sQuery);
  60. }
  61. public function registerHandlers () {
  62. if (!$this->registerHandler ('getAlertHandlerNameLocal', 'alert_response_file_delete_local', $this->_aObject['object'], $this->_aObject['storage_object']))
  63. return false;
  64. // add handler for original storage engine
  65. if ('Storage' == $this->_aObject['source_type']) // if original storage is "Storage", not "Folder"
  66. if (!$this->registerHandler ('getAlertHandlerNameOrig', 'alert_response_file_delete_orig', $this->_aObject['object'], $this->_aObject['source_params']['object']))
  67. return false;
  68. return true;
  69. }
  70. public function unregisterHandlers () {
  71. if (!$this->unregisterHandler('getAlertHandlerNameLocal', $this->_aObject['storage_object']))
  72. return false;
  73. // remove handler for original storage engine
  74. if ('Storage' == $this->_aObject['source_type']) // if original storage is "Storage", not "Folder"
  75. if (!$this->unregisterHandler('getAlertHandlerNameOrig', $this->_aObject['source_params']['object']))
  76. return false;
  77. return true;
  78. }
  79. protected function registerHandler ($sHandlerNameFunc, $sServiceFunc, $sObject, $sUnit) {
  80. $sHandlerName = $this->$sHandlerNameFunc ();
  81. $iHandlerId = $this->getAlertHandlerId ($sHandlerName);
  82. if ($iHandlerId) // if handler already exists, do nothing
  83. return true;
  84. $sServiceCall = serialize(array(
  85. 'module' => 'system',
  86. 'method' => $sServiceFunc,
  87. 'params' => array($sObject),
  88. 'class' => 'TemplImageServices'
  89. ));
  90. $sQuery = $this->prepare("INSERT INTO `sys_alerts_handlers` SET `name` = ?, `service_call` = ?", $sHandlerName, $sServiceCall);
  91. if (!$this->query($sQuery))
  92. return false;
  93. $iHandlerId = $this->lastId();
  94. $sQuery = $this->prepare("INSERT INTO `sys_alerts` SET `unit` = ?, `action` = ?, `handler_id` = ?", $sUnit, 'file_deleted', $iHandlerId);
  95. if (!$this->query($sQuery)) {
  96. $this->unregisterHandlers ();
  97. return false;
  98. }
  99. return true;
  100. }
  101. protected function unregisterHandler ($sHandlerNameFunc, $sUnit) {
  102. $sHandlerName = $this->$sHandlerNameFunc ();
  103. $iHandlerId = $this->getAlertHandlerId ($sHandlerName);
  104. if (!$iHandlerId) // if handler is alrady missing, do nothing
  105. return true;
  106. $sQuery = $this->prepare("DELETE FROM `sys_alerts` WHERE `unit` = ? AND `action` = ? AND `handler_id` = ?", $sUnit, 'file_deleted', $iHandlerId);
  107. if (!$this->query($sQuery))
  108. return false;
  109. $sQuery = $this->prepare("DELETE FROM `sys_alerts_handlers` WHERE `id` = ?", $iHandlerId);
  110. return $this->query($sQuery);
  111. }
  112. protected function getAlertHandlerNameLocal () {
  113. return 'sys_image_transcoder_local_file_delete_' . $this->_aObject['object'];
  114. }
  115. protected function getAlertHandlerNameOrig () {
  116. return 'sys_image_transcoder_orig_file_delete_' . $this->_aObject['object'];
  117. }
  118. protected function getAlertHandlerId ($sHandlerName) {
  119. $sQuery = $this->prepare("SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = ?", $sHandlerName);
  120. return $this->getOne($sQuery);
  121. }
  122. }