1
0

BxDolTranscoderImageQuery.php 6.3 KB

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