BxDolFileHandler.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. * File preview object, it's used to preview different files in browser which browse usually doesn't support.
  11. *
  12. *
  13. * @section file_handler_add Adding new files handler:
  14. *
  15. *
  16. * Add record to 'sys_objects_file_handlers' table:
  17. *
  18. * - object: name of the file handler object, in the format: vendor prefix, underscore, module prefix, underscore, internal identifier or nothing; for example: bx_abode_pdf - custom file handler from Abode to display PDF files in browser.
  19. * - title: file handler title
  20. * - override_class_name: user defined class name which is derived from one of base file handler class.
  21. * - override_class_file: the location of the user defined class, leave it empty if class is located in system folders.
  22. *
  23. *
  24. * @section example Example of usage
  25. *
  26. * Display file preview:
  27. *
  28. * @code
  29. * $oFileHandler = BxDolFileHandler::getObjectInstanceByFile('hello.pdf'); // get file preview class
  30. * if ($oFileHandler) // check if preview is available for gived file
  31. * echo $oFileHandler->display (); // output HTML which will automatically show file preview
  32. * @endcode
  33. *
  34. */
  35. class BxDolFileHandler extends BxDolFactory implements iBxDolFactoryObject
  36. {
  37. protected $_sObject;
  38. protected $_aObject;
  39. /**
  40. * Constructor
  41. * @param $aObject array of file handler options
  42. */
  43. protected function __construct($aObject)
  44. {
  45. parent::__construct();
  46. $this->_sObject = $aObject['object'];
  47. $this->_aObject = $aObject;
  48. }
  49. /**
  50. * Get file handler object instance by object name
  51. * @param $sObject object name
  52. * @return object instance or false on error
  53. */
  54. static public function getObjectInstance($sObject)
  55. {
  56. if (isset($GLOBALS['bxDolClasses'][__CLASS__.'!'.$sObject]))
  57. return $GLOBALS['bxDolClasses'][__CLASS__.'!'.$sObject];
  58. $aObjects = BxDolFileHandlerQuery::getObjects();
  59. if (!$aObjects || !isset($aObjects[$sObject]))
  60. return false;
  61. $aObject = $aObjects[$sObject];
  62. if (empty($aObject['override_class_name']))
  63. return false;
  64. $sClass = $aObject['override_class_name'];
  65. if (!empty($aObject['override_class_file']))
  66. require_once(BX_DIRECTORY_PATH_ROOT . $aObject['override_class_file']);
  67. $o = new $sClass($aObject);
  68. if (!$o->isActive())
  69. return false;
  70. return ($GLOBALS['bxDolClasses'][__CLASS__.'!'.$sObject] = $o);
  71. }
  72. /**
  73. * Get file handler object instance by file name
  74. * @param $sFileName file name
  75. * @return object instance or false on error
  76. */
  77. static public function getObjectInstanceByFile($sFileName)
  78. {
  79. if (!($aObjects = BxDolFileHandlerQuery::getObjects()))
  80. return false;
  81. $sObject = false;
  82. foreach ($aObjects as $sObject => $aObject)
  83. if (preg_match($aObject['preg_ext'], $sFileName))
  84. return self::getObjectInstance($sObject);
  85. return false;
  86. }
  87. /**
  88. * Display file preview
  89. */
  90. public function display ($sFileUrl, $aFile)
  91. {
  92. // override this function in particular class
  93. }
  94. /**
  95. * Check if file preview is available
  96. */
  97. public function isActive ()
  98. {
  99. return $this->_aObject['active'];
  100. }
  101. }
  102. /** @} */