File Manager

Current Directory: /home/astoriaah/www/administrator/components/com_akeeba/Model
Viewing File: /home/astoriaah/www/administrator/components/com_akeeba/Model/Discover.php
<?php /** * @package akeebabackup * @copyright Copyright (c)2006-2022 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Backup\Admin\Model; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; use FOF40\Model\Model; use Joomla\CMS\Language\Text; /** * Model for the discover and import page */ class Discover extends Model { /** * Returns a list of the archive files in a directory which do not already belong to a backup record * * @return array */ public function getFiles() { $ret = []; $directory = $this->getState('directory', ''); $directory = Factory::getFilesystemTools()->translateStockDirs($directory); // Get all archive files $allFiles = Factory::getFileLister()->getFiles($directory, true); $files = []; if (!empty($allFiles)) { foreach ($allFiles as $file) { $ext = strtoupper(substr($file, -3)); if (in_array($ext, ['JPA', 'JPS', 'ZIP'])) { $files[] = $file; } } } // If nothing found, bail out if (empty($files)) { return $ret; } // Make sure these files do not already exist in another backup record $db = $this->container->db; $sql = $db->getQuery(true) ->select($db->qn('absolute_path')) ->from($db->qn('#__ak_stats')) ->where($db->qn('absolute_path') . ' LIKE ' . $db->q($directory . '%')) ->where($db->qn('filesexist') . ' = ' . $db->q('1')); try { $existingFiles = $db->setQuery($sql)->loadColumn(); } catch (\Exception $e) { $existingFiles = []; } foreach ($files as $file) { if (!in_array($file, $existingFiles)) { $ret[] = $file; } } // Finally sort the resulting array for easier reading sort($ret); return $ret; } /** * Imports an archive file as a new backup record * * @param string $file The full path to the archive to import * * @return int The new backup record ID */ public function import($file) { $directory = $this->getState('directory', ''); $directory = Factory::getFilesystemTools()->translateStockDirs($directory); // Find out how many parts there are $multipart = 0; $base = substr($file, 0, -4); $ext = substr($file, -3); $found = true; $total_size = @filesize($directory . '/' . $file); while ($found) { $multipart++; $newExtension = substr($ext, 0, 1) . sprintf('%02u', $multipart); $newFile = $directory . '/' . $base . '.' . $newExtension; $found = file_exists($newFile); if ($found) { $total_size += @filesize($newFile); } } $fileModificationTime = @filemtime($directory . '/' . $file); if (empty($fileModificationTime)) { $fileModificationTime = time(); } // Create a new backup record $record = [ 'description' => Text::_('COM_AKEEBA_DISCOVER_LABEL_IMPORTEDDESCRIPTION'), 'comment' => '', 'backupstart' => date('Y-m-d H:i:s', $fileModificationTime), 'backupend' => date('Y-m-d H:i:s', $fileModificationTime + 1), 'status' => 'complete', 'origin' => 'backend', 'type' => 'full', 'profile_id' => 1, 'archivename' => $file, 'absolute_path' => $directory . '/' . $file, 'multipart' => $multipart, 'tag' => 'backend', 'filesexist' => 1, 'remote_filename' => '', 'total_size' => $total_size, ]; $id = null; $id = Platform::getInstance()->set_or_update_statistics($id, $record); return $id; } }