PageRenderTime 61ms CodeModel.GetById 27ms RepoModel.GetById 1ms app.codeStats 0ms

/seotoaster_core/application/app/Tools/Page/Tools.php

https://github.com/seotoaster-team/seotoaster
PHP | 285 lines | 222 code | 34 blank | 29 comment | 50 complexity | bb417538c4584a20bc14d0b2ff50cc41 MD5 | raw file
  1. <?php
  2. /**
  3. * Tools
  4. *
  5. * @author Eugene I. Nezhuta [Seotoaster Dev Team] <eugene@seotoaster.com>
  6. */
  7. class Tools_Page_Tools
  8. {
  9. const PLACEHOLDER_NOIMAGE = 'system/images/noimage.png';
  10. const PWA_OFFLINE_PAGE_URL = '/pwa-offline.html';
  11. public static function getPreview($page, $crop = false)
  12. {
  13. $websiteHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('website');
  14. $configHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('config');
  15. $path = (bool)$crop ? $websiteHelper->getPreviewCrop() : $websiteHelper->getPreview() ;
  16. if (is_numeric($page)){
  17. $page = Application_Model_Mappers_PageMapper::getInstance()->find(intval($page));
  18. }
  19. if ($page instanceof Application_Model_Models_Page){
  20. $validator = new Zend_Validate_Regex('~^https?://.*~');
  21. $preview = $page->getPreviewImage();
  22. if (!is_null($preview)) {
  23. if ($validator->isValid($preview)){
  24. return $preview;
  25. } else {
  26. $websiteUrl = ($configHelper->getConfig('mediaServers') ? Tools_Content_Tools::applyMediaServers($websiteHelper->getUrl()) : $websiteHelper->getUrl());
  27. $previewPath = $websiteHelper->getPath().$path.$preview;
  28. if (is_file($previewPath)) {
  29. return $websiteUrl . $path . $preview;
  30. }
  31. }
  32. }
  33. }
  34. return $websiteHelper->getUrl() . self::PLACEHOLDER_NOIMAGE;
  35. }
  36. /**
  37. * Returns information about preview page, checks crop preview
  38. * @param $pageId
  39. * @param bool $croped
  40. * @param string $cropSizeSubfolder
  41. *
  42. * @return array
  43. */
  44. public static function getPreviewFilePath($pageId, $croped = false, $cropSizeSubfolder = '')
  45. {
  46. $websiteHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('website');
  47. $cropSizeSubfolder = ($croped && !empty($cropSizeSubfolder)) ? trim($cropSizeSubfolder, '/').'/' : '';
  48. $infoPreview = array(
  49. 'sitePath' => $websiteHelper->getPath(),
  50. 'previewPath' => $websiteHelper->getPreview(),
  51. 'previewCropPath' => $websiteHelper->getPreviewCrop(),
  52. 'sizeSubfolder' => $cropSizeSubfolder,
  53. 'fileName' => '',
  54. 'path' => '',
  55. 'fullPath' => ''
  56. );
  57. $pathPreview = ($croped) ? $websiteHelper->getPreviewCrop() : $websiteHelper->getPreview();
  58. if ($croped && $cropSizeSubfolder != '') {
  59. $pathPreview .= $cropSizeSubfolder;
  60. }
  61. $page = Application_Model_Mappers_PageMapper::getInstance()->find($pageId);
  62. if ($page instanceof Application_Model_Models_Page) {
  63. $infoPreview['fileName'] = $page->getPreviewImage();
  64. $fullPath = $websiteHelper->getPath().$pathPreview.$page->getPreviewImage();
  65. if (is_file($fullPath) && is_readable($fullPath)) {
  66. $infoPreview['path'] = $pathPreview.$page->getPreviewImage();
  67. $infoPreview['fullPath'] = $fullPath;
  68. }
  69. }
  70. return $infoPreview;
  71. }
  72. /**
  73. * @deprecated Use Tools_Page_Tools::getPreview() instead. Will be removed in 2.2
  74. */
  75. public static function getPreviewPath($pageId, $capIfNoPreview = false, $croped = false)
  76. {
  77. Tools_System_Tools::debugMode() && error_log('Called deprecated Tools_Page_Tools::getPreviewPath(). Use Tools_Page_Tools::getPreview() instead');
  78. $websiteHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('website');
  79. $configHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('config');
  80. $pageHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('page');
  81. $websiteUrl = ($configHelper->getConfig('mediaServers') ? Tools_Content_Tools::applyMediaServers($websiteHelper->getUrl()) : $websiteHelper->getUrl());
  82. try {
  83. $previews = Tools_Filesystem_Tools::findFilesByExtension($websiteHelper->getPath() . (($croped) ? $websiteHelper->getPreviewCrop() :$websiteHelper->getPreview()), 'jpg|png|jpeg|gif', true, true, false);
  84. } catch (Exceptions_SeotoasterException $se) {
  85. if(APPLICATION_ENV == 'development') {
  86. error_log("(Cant find preview thumbnail because: " . $se->getMessage() . "\n" . $se->getTraceAsString());
  87. }
  88. return $websiteUrl . 'system/images/noimage.png';
  89. }
  90. $page = Application_Model_Mappers_PageMapper::getInstance()->find($pageId);
  91. if ($page instanceof Application_Model_Models_Page) {
  92. $cleanUrl = $pageHelper->clean(preg_replace('~/+~', '-', $page->getUrl()));
  93. unset($page);
  94. $path = (array_key_exists($cleanUrl, $previews)) ? str_replace($websiteHelper->getPath(), $websiteUrl, $previews[$cleanUrl]) : '';
  95. if(!$path && $capIfNoPreview) {
  96. return $websiteUrl . 'system/images/noimage.png';
  97. }
  98. return str_replace(DIRECTORY_SEPARATOR, '/', $path);
  99. }
  100. return $websiteUrl . 'system/images/noimage.png';
  101. }
  102. public static function getDraftPages()
  103. {
  104. $cacheHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('cache');
  105. if(null === ($draftPages = $cacheHelper->load(Helpers_Action_Cache::KEY_DRAFT, Helpers_Action_Cache::PREFIX_DRAFT))) {
  106. $draftPages = Application_Model_Mappers_PageMapper::getInstance()->fetchAllDraftPages();
  107. $cacheHelper->save(Helpers_Action_Cache::KEY_DRAFT, $draftPages, Helpers_Action_Cache::PREFIX_DRAFT, array(Helpers_Action_Cache::TAG_DRAFT), Helpers_Action_Cache::CACHE_LONG);
  108. }
  109. return $draftPages;
  110. }
  111. public static function getDraftPagesCount()
  112. {
  113. $cacheHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('cache');
  114. if (null === ($draftPagesCount = $cacheHelper->load(Helpers_Action_Cache::KEY_DRAFT_COUNT, Helpers_Action_Cache::PREFIX_DRAFT))) {
  115. $draftPagesCount = Application_Model_Mappers_PageMapper::getInstance()->getDraftPagesCount();
  116. $cacheHelper->save(Helpers_Action_Cache::KEY_DRAFT_COUNT, $draftPagesCount, Helpers_Action_Cache::PREFIX_DRAFT, array(Helpers_Action_Cache::TAG_DRAFT), Helpers_Action_Cache::CACHE_LONG);
  117. }
  118. return $draftPagesCount;
  119. }
  120. public static function getLandingPage($type)
  121. {
  122. if(!isset($type) || empty ($type)) {
  123. throw new Exceptions_SeotoasterException('You should specify landing page type');
  124. }
  125. $landingPage = null;
  126. switch ($type) {
  127. case Application_Model_Models_Page::OPT_SIGNUPLAND:
  128. $landingPage = Application_Model_Mappers_PageMapper::getInstance()->findSignupLandign();
  129. break;
  130. case Application_Model_Models_Page::OPT_MEMLAND:
  131. $landingPage = Application_Model_Mappers_PageMapper::getInstance()->findMemberLanding();
  132. break;
  133. case Application_Model_Models_Page::OPT_ERRLAND:
  134. $landingPage = Application_Model_Mappers_PageMapper::getInstance()->findErrorLoginLanding();
  135. break;
  136. }
  137. return $landingPage;
  138. }
  139. /**
  140. * @todo Should me moved to the shopping plugin
  141. * @static
  142. * @return null
  143. */
  144. public static function getProductCategoryPage()
  145. {
  146. // We need to know product category page url
  147. // This url specified in the bundle plugin "Shopping"
  148. // But this plugin may not be present in the system (not recommended)
  149. $shopping = Tools_Plugins_Tools::findPluginByName('shopping');
  150. $pageUrl = ($shopping->getStatus() == Application_Model_Models_Plugin::ENABLED) ? Shopping::PRODUCT_CATEGORY_URL : null;
  151. if($pageUrl === null) {
  152. return null;
  153. }
  154. return Application_Model_Mappers_PageMapper::getInstance()->findByUrl($pageUrl);
  155. }
  156. public static function getPagesCountByTemplate($templateName)
  157. {
  158. $pageDbTable = new Application_Model_DbTable_Page();
  159. return $pageDbTable->getAdapter()->query($pageDbTable->select()->where('template_id="' . $templateName . '"'))->rowCount();
  160. }
  161. public static function getPageOptions($activeOnly = false)
  162. {
  163. $prepared = array();
  164. $options = Application_Model_Mappers_PageOptionMapper::getInstance()->fetchOptions($activeOnly);
  165. if(!empty($options)) {
  166. foreach($options as $option) {
  167. if(isset($option['context']) && $option['context']) {
  168. $prepared[$option['context']][$option['id']] = $option['title'];
  169. } else {
  170. $prepared['Common'][$option['id']] = $option['title'];
  171. }
  172. }
  173. }
  174. return $prepared;
  175. }
  176. public static function processPagePreviewImage($pageUrl, $tmpPreviewFile = null)
  177. {
  178. $websiteHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('website');
  179. $pageHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('page');
  180. $websiteConfig = Zend_Controller_Action_HelperBroker::getStaticHelper('config')->getConfig();
  181. $pageUrl = str_replace(DIRECTORY_SEPARATOR, '-', $pageHelper->clean($pageUrl));
  182. $previewPath = $websiteHelper->getPath() . $websiteHelper->getPreview();
  183. // $filelist = Tools_Filesystem_Tools::findFilesByExtension($previewPath, '(jpg|gif|png)', false, false, false);
  184. $currentPreviewList = glob($previewPath.$pageUrl.'.{jpg,jpeg,png,gif}', GLOB_BRACE);
  185. if ($tmpPreviewFile) {
  186. $tmpPreviewFile = str_replace($websiteHelper->getUrl(), $websiteHelper->getPath(), $tmpPreviewFile);
  187. if (is_file($tmpPreviewFile) && is_readable($tmpPreviewFile)){
  188. preg_match('/\.[\w]{2,6}$/', $tmpPreviewFile, $extension);
  189. $newPreviewImageFile = $previewPath . $pageUrl . $extension[0];
  190. //cleaning form existing page previews
  191. if(!empty($currentPreviewList)) {
  192. foreach ($currentPreviewList as $key => $file) {
  193. if(file_exists($file)) {
  194. if (Tools_Filesystem_Tools::deleteFile($file)){
  195. // unset($currentPreviewList[$key]);
  196. }
  197. }
  198. }
  199. }
  200. if (is_writable($newPreviewImageFile)){
  201. $status = @rename($tmpPreviewFile, $newPreviewImageFile);
  202. } else {
  203. $status = @copy($tmpPreviewFile, $newPreviewImageFile);
  204. }
  205. if ($status && file_exists($tmpPreviewFile)) {
  206. Tools_Filesystem_Tools::deleteFile($tmpPreviewFile);
  207. }
  208. $miscConfig = Zend_Registry::get('misc');
  209. //check for the previews crop folder and try to create it if not exists
  210. $cropPreviewDirPath = $websiteHelper->getPath() . $websiteHelper->getPreviewCrop();
  211. if(!is_dir($cropPreviewDirPath)) {
  212. @mkdir($cropPreviewDirPath);
  213. } else {
  214. // unlink old croped page previews
  215. if(!empty($currentPreviewList)) {
  216. foreach($currentPreviewList as $fileToUnlink) {
  217. $unlinkPath = str_replace($previewPath, $cropPreviewDirPath, $fileToUnlink);
  218. if(file_exists($unlinkPath)) {
  219. unlink($unlinkPath);
  220. }
  221. }
  222. }
  223. }
  224. Tools_Image_Tools::resize($newPreviewImageFile, $websiteConfig['teaserSize'], false, $cropPreviewDirPath, true);
  225. unset($miscConfig);
  226. return $pageUrl . $extension[0];
  227. }
  228. }
  229. if (sizeof($currentPreviewList) == 0) {
  230. return false;
  231. } else {
  232. $pagePreviewImage = str_replace($websiteHelper->getPath(), $websiteHelper->getUrl(), reset($currentPreviewList));
  233. }
  234. return $pagePreviewImage;
  235. }
  236. public static function getPageFolders()
  237. {
  238. return Application_Model_Mappers_PageFolderMapper::getInstance()->getPageFolders();
  239. }
  240. public static function getPageUrlWithSubFolders(Application_Model_Models_Page $page) {
  241. $url = $page->getUrl();
  242. if ($page->getPageFolder()) {
  243. if (empty($page->getIsFolderIndex())) {
  244. $url = $page->getPageFolder() . '/' . $page->getUrl();
  245. } else {
  246. $url = $page->getPageFolder() . '/';
  247. }
  248. }
  249. return $url;
  250. }
  251. }