Exemplo n.º 1
0
 public function store()
 {
     // Add XML header
     $this->xml->addHeader();
     // Add <form> tag
     $this->xml->add('form');
     $this->storeStructure();
     $this->storeFields();
     $this->storeCalculations();
     $this->storePost();
     $this->storeConditions();
     $this->storeDirectory();
     $this->storeEmails();
     $this->storeMappings();
     // Allow plugins to add their own data to the backup.
     JFactory::getApplication()->triggerEvent('rsfp_onFormBackup', array($this->form, $this->xml, $this->fields));
     // Close <form> tag
     $this->xml->add('/form');
     $archive = new RSFormProTar($this->path);
     $buffer = (string) $this->xml;
     $size = strlen($buffer);
     $archive->addHeader($size, RSFormProBackupHelper::getHash($this->form->FormId) . '.xml');
     $archive->add($buffer);
     $archive->addPadding($size);
     $archive->close();
 }
Exemplo n.º 2
0
 public function storeMetaData()
 {
     // Load forms from the database
     $db =& $this->db;
     $query = $db->getQuery(true);
     $query->select('*')->from($db->qn('#__rsform_forms'))->where($db->qn('FormId') . ' IN (' . RSFormProBackupHelper::qi($this->formIds) . ')');
     $db->setQuery($query);
     $this->forms = $db->loadObjectList('FormId');
     // Count the number of submissions as well, if requested.
     if ($this->submissions) {
         $query->clear()->select('COUNT(' . $db->qn('SubmissionId') . ') AS ' . $db->qn('count'))->select($db->qn('FormId'))->from($db->qn('#__rsform_submissions'))->where($db->qn('FormId') . ' IN (' . RSFormProBackupHelper::qi($this->formIds) . ')')->group($db->qn('FormId'));
         $db->setQuery($query);
         if ($submissions = $db->loadObjectList()) {
             foreach ($submissions as $submission) {
                 if (isset($this->forms[$submission->FormId])) {
                     $this->forms[$submission->FormId]->SubmissionsCount = $submission->count;
                 }
             }
         }
     }
     // Initialize XML writer.
     $xml = new RSFormProBackupXML();
     $xml->addHeader()->add('rsform')->add('version', (string) new RSFormProVersion())->add('cms', JVERSION)->add('php', phpversion())->add('os', PHP_OS)->add('url', JUri::root())->add('root', JPATH_ROOT)->add('author', JFactory::getUser()->get('email'))->add('date', JFactory::getDate()->toSql());
     // Start adding form information
     if ($this->forms) {
         $xml->add('forms');
         foreach ($this->forms as $form) {
             $xml->add('form')->add('id', RSFormProBackupHelper::getHash($form->FormId))->add('name', $form->FormName)->add('title', $form->FormTitle)->add('submissions', !empty($form->SubmissionsCount) ? $form->SubmissionsCount : 0)->add('/form');
         }
         $xml->add('/forms');
     }
     // Finishup
     $xml->add('/rsform');
     $archive = new RSFormProTar($this->getPath());
     $buffer = (string) $xml;
     $size = strlen($buffer);
     $archive->addHeader($size, 'metadata.xml');
     $archive->add($buffer);
     $archive->addPadding($size);
     $archive->close();
 }
Exemplo n.º 3
0
 public function store()
 {
     $archive = new RSFormProTar($this->path);
     $db =& $this->db;
     $done = false;
     // Set the data XML file number
     if ($this->limitstart >= $this->limit) {
         $xmlNumber = round($this->limitstart / $this->limit);
     } else {
         $xmlNumber = 0;
     }
     // Grab the submissions
     $query = $db->getQuery(true);
     $query->select('*')->from($db->qn('#__rsform_submissions'))->where($db->qn('FormId') . '=' . $db->q($this->id));
     $db->setQuery($query, $this->limitstart, $this->limit);
     if ($submissions = $db->loadObjectList('SubmissionId')) {
         $query->clear()->select('*')->from($db->qn('#__rsform_submission_values'))->where($db->qn('SubmissionId') . ' IN (' . RSFormProBackupHelper::qi(array_keys($submissions)) . ')');
         $db->setQuery($query);
         $values = $db->loadObjectList();
         // Record the position
         $this->header = $archive->tell();
         // Add the 512-bytes dummy header
         $archive->addEmptyHeader();
         // Add the XML header & opening tag.
         $this->xml->addHeader();
         $this->xml->add('submissions');
         foreach ($values as $value) {
             if (empty($submissions[$value->SubmissionId]->values)) {
                 $submissions[$value->SubmissionId]->values = array();
             }
             $submissions[$value->SubmissionId]->values[$value->FieldName] = $value->FieldValue;
         }
         foreach ($submissions as $submission) {
             $values = isset($submission->values) ? $submission->values : array();
             // No need for these.
             unset($submission->values, $submission->SubmissionId, $submission->FormId);
             $this->xml->add('submission');
             foreach ($submission as $property => $value) {
                 $this->xml->add($property, $value);
             }
             // Add values
             $this->xml->add('values');
             foreach ($values as $property => $value) {
                 $this->xml->add('value');
                 $this->xml->add('fieldname', $property);
                 $this->xml->add('fieldvalue', $value);
                 $this->xml->add('/value');
             }
             $this->xml->add('/values');
             $this->xml->add('/submission');
         }
         // We've finished, no more submissions, add the closing tag.
         $this->xml->add('/submissions');
         // Add data to archive.
         $archive->add((string) $this->xml);
         // Compute size of current file in archive.
         $size = $archive->tell() - $this->header - 512;
         // Add missing padding.
         $archive->addPadding($size);
         // Go to header (so we can add missing header data).
         $archive->seek($this->header);
         // Add missing header data.
         $archive->addHeader($size, RSFormProBackupHelper::getHash($this->id) . '-data-' . $xmlNumber . '.xml');
     } else {
         // Flag so that we can move on to the next form
         $done = true;
     }
     $archive->close();
     return (object) array('done' => $done, 'header' => $this->header);
 }
Exemplo n.º 4
0
 public function compressGzip()
 {
     $input = JFactory::getApplication()->input;
     $key = $input->get('key', '', 'cmd');
     $seek = $input->get('seek', 0, 'cmd');
     $options = array('key' => $key);
     try {
         $backup = new RSFormProBackup($options);
         $archive = new RSFormProTar($backup->getPath());
         // GZIP compress it.
         $seek = $archive->compress($seek);
         // Continue with GZIP archive creation
         $this->showResponse(array('status' => 'ok', 'step' => $seek ? 'compress-gzip' : 'done', 'seek' => $seek));
     } catch (Exception $e) {
         $this->showError($e->getMessage());
     }
 }