<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\Folder;
class RsformModelRestore extends BaseDatabaseModel
{
protected function getExtension($filename) {
$parts = explode('.', $filename);
return strtolower(array_pop($parts));
}
public function restore($file) {
// Check if we're uploading a file.
if ($file['error'] == UPLOAD_ERR_NO_FILE) {
throw new Exception(Text::_('RSFP_RESTORE_NO_FILE_SELECTED'));
}
// Check if the upload didn't succeed.
if ($file['error'] != UPLOAD_ERR_OK) {
switch ($file['error'])
{
default:
$msg = 'RSFP_UPLOAD_ERROR';
break;
case UPLOAD_ERR_INI_SIZE:
$msg = 'RSFP_UPLOAD_ERROR_INI_SIZE';
break;
case UPLOAD_ERR_FORM_SIZE:
$msg = 'RSFP_UPLOAD_ERROR_FORM_SIZE';
break;
case UPLOAD_ERR_PARTIAL:
$msg = 'RSFP_UPLOAD_ERROR_PARTIAL';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$msg = 'RSFP_UPLOAD_ERROR_NO_TMP_DIR';
break;
case UPLOAD_ERR_CANT_WRITE:
$msg = 'RSFP_UPLOAD_ERROR_CANT_WRITE';
break;
case UPLOAD_ERR_EXTENSION:
$msg = 'RSFP_UPLOAD_ERROR_PHP_EXTENSION';
break;
}
throw new Exception(Text::sprintf($msg, $file['name']));
}
$extension = $this->getExtension($file['name']);
// Check if the extension is correct
if (!in_array($extension, array('zip', 'tgz', 'gz', 'tar')))
{
throw new Exception(Text::sprintf('RSFP_RESTORE_NOT_VALID_EXTENSION', $extension));
}
if ($extension == 'zip')
{
throw new Exception(Text::_('COM_RSFORM_LEGACY_BACKUPS_CAN_NO_LONGER_BE_RESTORED'));
}
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/restore/restore.php';
$restore = new RSFormProRestore();
$restore->upload($file);
return $restore->getKey();
}
public function decompress() {
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/restore/restore.php';
$options = array(
'key' => $this->getKey()
);
$restore = new RSFormProRestore($options);
$restore->decompress();
}
public function getInfo() {
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/restore/restore.php';
$options = array(
'key' => $this->getKey()
);
$restore = new RSFormProRestore($options);
return $restore->getInfo();
}
public function parseForm() {
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/restore/restore.php';
$input = Factory::getApplication()->input;
$options = array(
'key' => $this->getKey(),
'keepId' => $this->getKeepId(),
'form' => $input->getCmd('form')
);
$restore = new RSFormProRestore($options);
$formId = $restore->parseForm();
return (object) array(
'form' => $input->getCmd('form'),
'formId' => $formId
);
}
public function parseSubmissions() {
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/restore/restore.php';
$input = Factory::getApplication()->input;
$currentFile = $input->getCmd('file');
$options = array(
'key' => $this->getKey(),
'form' => $input->getCmd('form'),
'formId' => $input->getCmd('formId'),
'file' => $currentFile,
);
$restore = new RSFormProRestore($options);
$restore->parseSubmissions();
$return = new StdClass();
$return->form = $input->getCmd('form');
$return->nextFile = $restore->checkNextFile(($currentFile + 1));
return $return;
}
public function overwriteForms() {
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/restore/restore.php';
$options = array(
'key' => $this->getKey(),
'overwrite' => $this->getOverwrite()
);
$restore = new RSFormProRestore($options);
$restore->overwriteForms();
}
public function deleteTemporaryFiles() {
// set the path to delete
$path = Factory::getApplication()->get('tmp_path') . '/rsform_backup_'.$this->getKey();
if (!Folder::delete($path)) {
throw new Exception(sprintf('Could not remove temporary folder: "%s"!', $path));
}
}
public function getKey() {
return Factory::getApplication()->input->getCmd('key');
}
public function getOverwrite() {
// Get overwrite from the jform data
$data = Factory::getApplication()->input->get('jform', array(), 'array');
if (isset($data['overwrite'])) {
return (int) $data['overwrite'];
}
// Get the overwrite from the normal form data
$overwrite = Factory::getApplication()->input->getInt('overwrite', 0);
return $overwrite;
}
public function getKeepId() {
// Get overwrite from the jform data
$data = Factory::getApplication()->input->get('jform', array(), 'array');
if (isset($data['keepid'])) {
return (int) $data['keepid'];
}
// Get the overwrite from the normal form data
$keepId = Factory::getApplication()->input->getInt('keepid', 0);
return $keepId;
}
}