protected function _finalize() { // Open the log $logTag = $this->getLogTag(); Factory::getLog()->open($logTag); if (!static::$registeredErrorHandler) { static::$registeredErrorHandler = true; set_error_handler('\\Akeeba\\Engine\\Core\\akeebaBackupErrorHandler'); } // Kill the cached array $this->array_cache = null; // Remove the memory file $tempVarsTag = $this->tag . (empty($this->backup_id) ? '' : '.' . $this->backup_id); Factory::getFactoryStorage()->reset($tempVarsTag); // All done. Factory::getLog()->log(LogLevel::DEBUG, "Kettenrad :: Just finished"); $this->setState('finished'); // Send a push message to mark the end of backup $pushSubjectKey = $this->warnings_issued ? 'COM_AKEEBA_PUSH_ENDBACKUP_WARNINGS_SUBJECT' : 'COM_AKEEBA_PUSH_ENDBACKUP_SUCCESS_SUBJECT'; $pushBodyKey = $this->warnings_issued ? 'COM_AKEEBA_PUSH_ENDBACKUP_WARNINGS_BODY' : 'COM_AKEEBA_PUSH_ENDBACKUP_SUCCESS_BODY'; $platform = Platform::getInstance(); $timeStamp = date($platform->translate('DATE_FORMAT_LC2')); $pushSubject = sprintf($platform->translate($pushSubjectKey), $platform->get_site_name(), $platform->get_host()); $pushDetails = sprintf($platform->translate($pushBodyKey), $platform->get_site_name(), $platform->get_host(), $timeStamp); Factory::getPush()->message($pushSubject, $pushDetails); //restore_error_handler(); }
/** * Starts or step a backup process * * @return array An Akeeba Engine return array */ public function runBackup() { $ret_array = array(); $ajaxTask = $this->getState('ajax'); $tag = $this->getState('tag'); $backupId = $this->getState('backupid'); switch ($ajaxTask) { // Start a new backup case 'start': // Description is passed through a strict filter which removes HTML $description = $this->getState('description'); // The comment is passed through the Safe HTML filter (note: use 2 to force no filtering) $comment = $this->getState('comment'); $jpskey = $this->getState('jpskey'); $angiekey = $this->getState('angiekey'); if (is_null($backupId)) { $db = $this->getDbo(); $query = $db->getQuery(true)->select('MAX(' . $db->qn('id') . ')')->from($db->qn('#__ak_stats')); try { $maxId = $db->setQuery($query)->loadResult(); } catch (Exception $e) { $maxId = 0; } $backupId = 'id' . ($maxId + 1); } // Try resetting the engine Factory::resetState(array('maxrun' => 0)); // Remove any stale memory files left over from the previous step if (empty($tag)) { $tag = Platform::getInstance()->get_backup_origin(); } $tempVarsTag = $tag; $tempVarsTag .= empty($backupId) ? '' : '.' . $backupId; Factory::getFactoryStorage()->reset($tempVarsTag); Factory::loadState($tag, $backupId); $kettenrad = Factory::getKettenrad(); $kettenrad->setBackupId($backupId); $options = array('description' => $description, 'comment' => $comment, 'jpskey' => $jpskey, 'angiekey' => $angiekey); $kettenrad->setup($options); $kettenrad->tick(); $ret_array = $kettenrad->getStatusArray(); $kettenrad->resetWarnings(); // So as not to have duplicate warnings reports try { Factory::saveState($tag, $backupId); } catch (\RuntimeException $e) { $ret_array['Error'] = $e->getMessage(); } break; // Step through a backup // Step through a backup case 'step': Factory::loadState($tag, $backupId); $kettenrad = Factory::getKettenrad(); $kettenrad->setBackupId($backupId); $kettenrad->tick(); $ret_array = $kettenrad->getStatusArray(); $kettenrad->resetWarnings(); // So as not to have duplicate warnings reports try { Factory::saveState($tag, $backupId); } catch (\RuntimeException $e) { $ret_array['Error'] = $e->getMessage(); } if ($ret_array['HasRun'] == 1) { // Clean up Factory::nuke(); $tempVarsTag = $tag; $tempVarsTag .= empty($backupId) ? '' : '.' . $backupId; Factory::getFactoryStorage()->reset($tempVarsTag); } break; // Send a push notification for backup failure // Send a push notification for backup failure case 'pushFail': Factory::loadState($tag, $backupId); $errorMessage = $this->getState('errorMessage'); $platform = Platform::getInstance(); $pushSubject = sprintf($platform->translate('COM_AKEEBA_PUSH_ENDBACKUP_FAIL_SUBJECT'), $platform->get_site_name(), $platform->get_host()); $key = empty($errorMessage) ? 'COM_AKEEBA_PUSH_ENDBACKUP_FAIL_BODY' : 'COM_AKEEBA_PUSH_ENDBACKUP_FAIL_BODY_WITH_MESSAGE'; $pushDetails = sprintf($platform->translate($key), $platform->get_site_name(), $platform->get_host(), $errorMessage); Factory::getPush()->message($pushSubject, $pushDetails); break; default: break; } return $ret_array; }