| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  |  * Smarty Method ClearCompiledTemplate | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  |  * Smarty::clearCompiledTemplate() method | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * @package    Smarty | 
					
						
							|  |  |  |  * @subpackage PluginsInternal | 
					
						
							|  |  |  |  * @author     Uwe Tews | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  | class Smarty_Internal_Method_ClearCompiledTemplate | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Valid for Smarty object | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var int | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public $objMap = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Delete compiled template file | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  |      * @api  Smarty::clearCompiledTemplate() | 
					
						
							|  |  |  |      * @link http://www.smarty.net/docs/en/api.clear.compiled.template.tpl | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param \Smarty  $smarty | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |      * @param  string  $resource_name template name | 
					
						
							|  |  |  |      * @param  string  $compile_id    compile id | 
					
						
							|  |  |  |      * @param  integer $exp_time      expiration time | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return integer number of template files deleted | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  |     public function clearCompiledTemplate(Smarty $smarty, $resource_name = null, $compile_id = null, $exp_time = null) | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-12-27 03:28:26 +01:00
										 |  |  |         // clear template objects cache
 | 
					
						
							|  |  |  |         $smarty->_clearTemplateCache(); | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |         $_compile_dir = $smarty->getCompileDir(); | 
					
						
							|  |  |  |         if ($_compile_dir == '/') { //We should never want to delete this!
 | 
					
						
							|  |  |  |             return 0; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-08-06 21:42:20 +02:00
										 |  |  |         $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null; | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |         $_dir_sep = $smarty->use_sub_dirs ? DS : '^'; | 
					
						
							|  |  |  |         if (isset($resource_name)) { | 
					
						
							|  |  |  |             $_save_stat = $smarty->caching; | 
					
						
							|  |  |  |             $smarty->caching = false; | 
					
						
							| 
									
										
										
										
											2015-08-17 21:52:32 +02:00
										 |  |  |             /* @var Smarty_Internal_Template $tpl */ | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |             $tpl = new $smarty->template_class($resource_name, $smarty); | 
					
						
							|  |  |  |             $smarty->caching = $_save_stat; | 
					
						
							| 
									
										
										
										
											2016-03-11 03:36:43 +01:00
										 |  |  |             if (!$tpl->source->handler->uncompiled && !$tpl->source->handler->recompiled && $tpl->source->exists) { | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |                 $_resource_part_1 = basename(str_replace('^', DS, $tpl->compiled->filepath)); | 
					
						
							|  |  |  |                 $_resource_part_1_length = strlen($_resource_part_1); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 return 0; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1); | 
					
						
							|  |  |  |             $_resource_part_2_length = strlen($_resource_part_2); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $_dir = $_compile_dir; | 
					
						
							|  |  |  |         if ($smarty->use_sub_dirs && isset($_compile_id)) { | 
					
						
							|  |  |  |             $_dir .= $_compile_id . $_dir_sep; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (isset($_compile_id)) { | 
					
						
							|  |  |  |             $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep; | 
					
						
							|  |  |  |             $_compile_id_part_length = strlen($_compile_id_part); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $_count = 0; | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $_compileDirs = new RecursiveDirectoryIterator($_dir); | 
					
						
							|  |  |  |             // NOTE: UnexpectedValueException thrown for PHP >= 5.3
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         catch (Exception $e) { | 
					
						
							|  |  |  |             return 0; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); | 
					
						
							|  |  |  |         foreach ($_compile as $_file) { | 
					
						
							|  |  |  |             if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { | 
					
						
							|  |  |  |                 continue; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $_filepath = (string) $_file; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if ($_file->isDir()) { | 
					
						
							|  |  |  |                 if (!$_compile->isDot()) { | 
					
						
							|  |  |  |                     // delete folder if empty
 | 
					
						
							|  |  |  |                     @rmdir($_file->getPathname()); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $unlink = false; | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                 if ((!isset($_compile_id) || (isset($_filepath[ $_compile_id_part_length ]) && $a = | 
					
						
							|  |  |  |                                 !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) && | 
					
						
							|  |  |  |                     (!isset($resource_name) || (isset($_filepath[ $_resource_part_1_length ]) && | 
					
						
							|  |  |  |                                                 substr_compare($_filepath, $_resource_part_1, | 
					
						
							|  |  |  |                                                                - $_resource_part_1_length, $_resource_part_1_length) == | 
					
						
							|  |  |  |                                                 0) || (isset($_filepath[ $_resource_part_2_length ]) && | 
					
						
							|  |  |  |                                                        substr_compare($_filepath, $_resource_part_2, | 
					
						
							|  |  |  |                                                                       - $_resource_part_2_length, | 
					
						
							|  |  |  |                                                                       $_resource_part_2_length) == 0)) | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |                 ) { | 
					
						
							|  |  |  |                     if (isset($exp_time)) { | 
					
						
							|  |  |  |                         if (time() - @filemtime($_filepath) >= $exp_time) { | 
					
						
							|  |  |  |                             $unlink = true; | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                     } else { | 
					
						
							|  |  |  |                         $unlink = true; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if ($unlink && @unlink($_filepath)) { | 
					
						
							|  |  |  |                     $_count ++; | 
					
						
							| 
									
										
										
										
											2016-07-18 19:45:30 +02:00
										 |  |  |                     if (function_exists('opcache_invalidate') && strlen(ini_get("opcache.restrict_api")) < 1) { | 
					
						
							| 
									
										
										
										
											2015-12-27 05:42:30 +01:00
										 |  |  |                         opcache_invalidate($_filepath, true); | 
					
						
							| 
									
										
										
										
											2015-09-15 00:15:12 +02:00
										 |  |  |                     } | 
					
						
							| 
									
										
										
										
											2015-06-27 23:59:12 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $_count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |