BxDolImageTranscoderQuery.php 6.2 KB

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