Generator.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace Smartwave\Porto\Model\Cssconfig;
  3. class Generator
  4. {
  5. protected $_messageManager;
  6. protected $_cssconfigData;
  7. protected $_coreRegistry;
  8. protected $_storeManager;
  9. protected $_layoutManager;
  10. public function __construct(
  11. \Smartwave\Porto\Helper\Cssconfig $cssconfigData,
  12. \Magento\Framework\Registry $coreRegistry,
  13. \Magento\Store\Model\StoreManagerInterface $storeManager,
  14. \Magento\Framework\View\LayoutInterface $layoutManager,
  15. \Magento\Framework\Message\ManagerInterface $messageManager
  16. ) {
  17. $this->_cssconfigData = $cssconfigData;
  18. $this->_coreRegistry = $coreRegistry;
  19. $this->_storeManager = $storeManager;
  20. $this->_layoutManager = $layoutManager;
  21. $this->_messageManager = $messageManager;
  22. }
  23. public function generateCss($type, $websiteId, $storeId){
  24. if(!$websiteId && !$storeId) {
  25. $websites = $this->_storeManager->getWebsites(false, false);
  26. foreach ($websites as $id => $value) {
  27. $this->generateWebsiteCss($type, $id);
  28. }
  29. } else {
  30. if($storeId) {
  31. $this->generateStoreCss($type, $storeId);
  32. } else {
  33. $this->generateWebsiteCss($type, $websiteId);
  34. }
  35. }
  36. }
  37. protected function generateWebsiteCss($type, $websiteId) {
  38. $website = $this->_storeManager->getWebsite($websiteId);
  39. foreach($website->getStoreIds() as $storeId){
  40. $this->generateStoreCss($type, $storeId);
  41. }
  42. }
  43. protected function generateStoreCss($type, $storeId) {
  44. $store = $this->_storeManager->getStore($storeId);
  45. if(!$store->isActive())
  46. return;
  47. $storeCode = $store->getCode();
  48. $str1 = '_'.$storeCode;
  49. $str2 = $type.$str1.'.css';
  50. $str3 = $this->_cssconfigData->getCssConfigDir().$str2;
  51. $str4 = 'porto/css/'.$type.'.phtml';
  52. $this->_coreRegistry->register('cssgen_store', $storeCode);
  53. try {
  54. $block = $this->_layoutManager->createBlock('Smartwave\Porto\Block\Template')->setData('area','frontend')->setTemplate($str4)->toHtml();
  55. if(!file_exists($this->_cssconfigData->getCssConfigDir())) {
  56. @mkdir($this->_cssconfigData->getCssConfigDir(), 0777);
  57. }
  58. $file = @fopen($str3,"w+");
  59. @flock($file, LOCK_EX);
  60. @fwrite($file,$block);
  61. @flock($file, LOCK_UN);
  62. @fclose($file);
  63. if(empty($block)) {
  64. throw new \Exception( __("Template file is empty or doesn't exist: ".$str4) );
  65. }
  66. } catch (\Exception $e) {
  67. $this->_messageManager->addError(__('Failed generating CSS file: '.$str2.' in '.$this->_cssconfigData->getCssConfigDir()).'<br/>Message: '.$e->getMessage());
  68. }
  69. $this->_coreRegistry->unregister('cssgen_store');
  70. }
  71. }