Page MenuHomeIn-Portal Phabricator

D552.diff
No OneTemporary

File Metadata

Created
Sun, Feb 1, 12:43 AM

D552.diff

Index: branches/5.2.x/core/units/admin/admin_events_handler.php
===================================================================
--- branches/5.2.x/core/units/admin/admin_events_handler.php
+++ branches/5.2.x/core/units/admin/admin_events_handler.php
@@ -239,9 +239,9 @@
/**
* Deletes all compiled templates
*
- * @param kEvent $event
+ * @param kEvent $event Event.
+ *
* @return void
- * @access protected
*/
protected function OnDeleteCompiledTemplates(kEvent $event)
{
@@ -249,50 +249,93 @@
$event->status = kEvent::erSTOP;
}
- $base_path = WRITEABLE . DIRECTORY_SEPARATOR . 'cache';
+ // 1. Delete compiled templates.
+ $problematic_paths = $this->_deleteCompiledTemplates(WRITEABLE . DIRECTORY_SEPARATOR . 'cache');
- // delete debugger reports
+ // 2. Delete debugger reports.
$debugger_reports = glob(RESTRICTED . '/debug_@*@.txt');
if ( $debugger_reports ) {
- foreach ($debugger_reports as $debugger_report) {
- unlink($debugger_report);
+ foreach ( $debugger_reports as $debugger_report ) {
+ if ( unlink($debugger_report) === false ) {
+ $problematic_paths[$debugger_report] = true;
+ }
}
}
- $this->_deleteCompiledTemplates($base_path);
- $event->SetRedirectParam('action_completed', 1);
+ if ( !$problematic_paths ) {
+ $event->SetRedirectParam('action_completed', 1);
+
+ return;
+ }
+
+ $event->status = kEvent::erFAIL;
+
+ $heading = 'Please manually delete paths:';
+ $problematic_paths = array_map(
+ array('kUtil', 'convertPathToRelative'),
+ array_keys($problematic_paths)
+ );
+
+ if ( PHP_SAPI == 'cli' ) {
+ echo PHP_EOL;
+ echo "\033[1;31m" . $heading . "\033[0m" . PHP_EOL; // Red+Bold.
+
+ foreach ( $problematic_paths as $index => $problematic_path ) {
+ echo ($index + 1) . '. ' . $problematic_path . PHP_EOL;
+ }
+
+ echo PHP_EOL;
+ }
+ else {
+ echo '<h3 class="error">' . $heading . '</h3>';
+ echo '<ol>';
+
+ foreach ( $problematic_paths as $problematic_path ) {
+ echo '<li>' . $problematic_path . '</li>';
+ }
+
+ echo '</ol>';
+ }
}
/**
* Deletes compiled templates in a given folder
*
- * @param string $folder
- * @param bool $unlink_folder
- * @return void
- * @access protected
+ * @param string $folder Folder.
+ * @param boolean $unlink_folder Unlink folder.
+ *
+ * @return array
*/
protected function _deleteCompiledTemplates($folder, $unlink_folder = false)
{
+ $problematic_sub_folders = array();
$sub_folders = glob($folder . '/*', GLOB_ONLYDIR);
- if ( is_array($sub_folders) ) {
- foreach ($sub_folders as $sub_folder) {
- $this->_deleteCompiledTemplates($sub_folder, true);
+ if ( $sub_folders !== false ) {
+ foreach ( $sub_folders as $sub_folder ) {
+ $problematic_sub_folders += $this->_deleteCompiledTemplates($sub_folder, true);
}
}
+ if ( !$unlink_folder ) {
+ return $problematic_sub_folders;
+ }
+
$files = glob($folder . '/*.php');
- if ( is_array($files) ) {
- foreach ($files as $file) {
+ if ( $files !== false ) {
+ foreach ( $files as $file ) {
unlink($file);
}
}
- if ( $unlink_folder ) {
- rmdir($folder);
+ if ( rmdir($folder) ) {
+ return array();
}
+
+ // Folder wasn't deleted because it's either non-empty OR has incorrect permissions.
+ return array($folder => true);
}
/**

Event Timeline