if ($enabled) { $task = getQueryParam('task'); switch ($task) { case 'ping': // ping task - realy does nothing! $timer = AKFactory::getTimer(); $timer->enforce_min_exec_time(); break; case 'startRestore': AKFactory::nuke(); // Reset the factory // Let the control flow to the next step (the rest of the code is common!!) // Reset the factory // Let the control flow to the next step (the rest of the code is common!!) case 'stepRestore': $engine = AKFactory::getUnarchiver(); // Get the engine $observer = new RestorationObserver(); // Create a new observer $engine->attach($observer); // Attach the observer $engine->tick(); $ret = $engine->getStatusArray(); if ($ret['Error'] != '') { $retArray['status'] = false; $retArray['done'] = true; $retArray['message'] = $ret['Error']; } elseif (!$ret['HasRun']) { $retArray['files'] = $observer->filesProcessed; $retArray['bytesIn'] = $observer->compressedTotal; $retArray['bytesOut'] = $observer->uncompressedTotal;
} $retArray['Warnings'] = $ret['Warnings']; $retArray['lastfile'] = $observer->lastFile; } break; case 'cleanUp': if (!empty($json)) { $json = json_decode($json, true); if (array_key_exists('factory', $json)) { // Get the serialized factory $serialized = $json['factory']; AKFactory::unserialize($serialized); AKFactory::set('kickstart.enabled', true); } } $unarchiver = AKFactory::getUnarchiver(); // Get the engine $engine = AKFactory::getPostProc(); // 1. Remove installation recursive_remove_directory('installation'); // 2. Run the renames, backwards $renames = $unarchiver->renameFiles; if (!empty($renames)) { foreach ($renames as $original => $renamed) { $engine->rename($renamed, $original); } } // 3. Delete the archive foreach ($unarchiver->archiveList as $archive) { $engine->unlink($archive); }
/** * Checks the archive's data integrity by performing a dry-run extraction (no data is written to disk, just making * sure the archive can be extracted). If you have enabled "Upload archive part immediately" this won't run and * produce a warning instead. * * @param Finalization $parent * * @return bool True when done or an error occurred */ public function test_extract($parent) { // If for any reason we're called outside the Finalization context let's give up without a fight if (!$parent instanceof Finalization) { return true; } // Load the configuration engine $config = Factory::getConfiguration(); // Only run if we're explicitly enabled $enabled = $config->get('akeeba.advanced.integritycheck', 0); if (!$enabled) { return true; } // Make sure the "Process each part immediately" option is not enabled if ($config->get('engine.postproc.common.after_part', 0, false)) { $parent->setWarning(JText::_('COM_AKEEBA_ENGINE_TEXTEXTRACT_ERR_PROCESSIMMEDIATELY')); return true; } // Make sure an archiver engine producing backup archives of JPA, JPS or ZIP files is in use $archiver = Factory::getArchiverEngine(); $extension = $archiver->getExtension(); $extension = strtoupper($extension); $extension = ltrim($extension, '.'); if (!in_array($extension, array('JPA', 'JPS', 'ZIP'))) { $parent->setWarning(JText::_('COM_AKEEBA_ENGINE_TEXTEXTRACT_ERR_INVALIDARCHIVERTYPE')); return true; } // Set the KICKSTART constant to prevent Akeeba Restore from taking over the page output if (!defined('KICKSTART')) { define('KICKSTART', 1); } // Try to load Akeeba Restore try { $this->loadAkeebaRestore(); } catch (\RuntimeException $e) { $parent->setError($e->getMessage()); return true; } // Set up the Akeeba Restore engine, either from a serialised factory or from scratch $factory = $config->get('volatile.finalization.testextract.factory', null, false); if (!is_null($factory) && is_string($factory)) { \AKFactory::unserialize($factory); } else { $this->setUpAkeebaRestore(); } $parent->relayStep('Archive integrity check'); $parent->relaySubstep('Testing if archive can be extracted'); \AKFactory::set('kickstart.enabled', true); /** @var \AKAbstractUnarchiver $engine */ $engine = \AKFactory::getUnarchiver(); $observer = new FakeRestorationObserver(); $engine->attach($observer); $engine->tick(); $ret = $engine->getStatusArray(); // Did an error occur? if ($ret['Error'] != '') { $parent->setError(JText::sprintf('COM_AKEEBA_ENGINE_TEXTEXTRACT_ERR_INTEGRITYCHECKFAILED', $ret['Error'])); return true; } // Did we finish successfully? if (!$ret['HasRun']) { Factory::getLog()->log(LogLevel::INFO, __CLASS__ . ": The archive's integrity has been validated"); $config->set('volatile.finalization.testextract.factory', null, false); return true; } // Step finished and we need one more step to proceed. $factory = \AKFactory::serialize(); $config->set('volatile.finalization.testextract.factory', $factory, false); return false; }
switch($task) { case 'ping': // ping task - realy does nothing! $timer =& AKFactory::getTimer(); $timer->enforce_min_exec_time(); break; case 'startRestore': AKFactory::nuke(); // Reset the factory // Let the control flow to the next step (the rest of the code is common!!) case 'stepRestore': $engine =& AKFactory::getUnarchiver(); // Get the engine $observer = new RestorationObserver(); // Create a new observer $engine->attach($observer); // Attach the observer $engine->tick(); $ret = $engine->getStatusArray(); if( $ret['Error'] != '' ) { $retArray['status'] = false; $retArray['done'] = true; $retArray['message'] = $ret['Error']; } elseif( !$ret['HasRun'] ) { $retArray['files'] = $observer->filesProcessed; $retArray['bytesIn'] = $observer->compressedTotal;
function doAjax() { $ajax = $this->getState('ajax'); switch ($ajax) { // FTP Connection test for DirectFTP case 'testftp': // Grab request parameters $config = array('host' => $this->input->get('host', '', 'none', 2), 'port' => $this->input->get('port', 21, 'int'), 'user' => $this->input->get('user', '', 'none', 2), 'pass' => $this->input->get('pass', '', 'none', 2), 'initdir' => $this->input->get('initdir', '', 'none', 2), 'usessl' => $this->input->get('usessl', 'cmd') == 'true', 'passive' => $this->input->get('passive', 'cmd') == 'true'); // Perform the FTP connection test $test = new AEArchiverDirectftp(); $test->initialize('', $config); $errors = $test->getError(); if (empty($errors)) { $result = true; } else { $result = $errors; } break; case 'restoreFilesPing': case 'restoreFilesStart': case 'restoreFilesStep': case 'restoreFilesFinalize': global $restoration_setup; $restoration_setup = $this->getRestorationParameters(); define('KICKSTART', 1); include_once JPATH_COMPONENT_ADMINISTRATOR . '/restore.php'; akeebaTinyHackForRestorationObserver(); masterSetup(); $retArray = array('status' => true, 'message' => null); switch ($ajax) { case 'restoreFilesPing': // ping task - realy does nothing! $timer = AKFactory::getTimer(); $timer->enforce_min_exec_time(); break; case 'restoreFilesStart': AKFactory::nuke(); // Reset the factory // Reset the factory case 'restoreFilesStep': $config = JFactory::getConfig(); if (version_compare(JVERSION, '3.0', 'ge')) { $tmp_path = $config->get('tmp_path', ''); } else { $tmp_path = $config->getValue('tmp_path', ''); } $override = array('rename_dirs' => array('sql' => rtrim($tmp_path, '/\\') . '/sql')); $engine = AKFactory::getUnarchiver($override); // Get the engine $observer = new RestorationObserver(); // Create a new observer $engine->attach($observer); // Attach the observer $engine->tick(); $ret = $engine->getStatusArray(); if ($ret['Error'] != '') { $retArray['status'] = false; $retArray['done'] = true; $retArray['message'] = $ret['Error']; } elseif (!$ret['HasRun']) { $retArray['files'] = $observer->filesProcessed; $retArray['bytesIn'] = $observer->compressedTotal; $retArray['bytesOut'] = $observer->uncompressedTotal; $retArray['status'] = true; $retArray['done'] = true; } else { $retArray['files'] = $observer->filesProcessed; $retArray['bytesIn'] = $observer->compressedTotal; $retArray['bytesOut'] = $observer->uncompressedTotal; $retArray['status'] = true; $retArray['done'] = false; $retArray['factory'] = AKFactory::serialize(); } break; case 'restoreFilesFinalize': $root = AKFactory::get('kickstart.setup.destdir'); // Remove the sql dump directory $config = JFactory::getConfig(); if (version_compare(JVERSION, '3.0', 'ge')) { $tmp_path = $config->get('tmp_path', ''); } else { $tmp_path = $config->getValue('tmp_path', ''); } $sqldir = rtrim($tmp_path, '/\\') . '/sql'; recursive_remove_directory($sqldir); break; } return $retArray; break; case 'dbRestoreStart': $this->dbRestorationInit(); case 'dbRestore': $result = $this->dbRestore(); break; // Unrecognized AJAX task // Unrecognized AJAX task default: $result = false; break; } return $result; }