<?php /** * @package RSForm! Pro * @copyright (C) 2007-2019 www.rsjoomla.com * @license GPL, http://www.gnu.org/copyleft/gpl.html */ defined('_JEXEC') or die; class RSFormProBackupXML { // Complete path to the XML. protected $path; // File pointer to $this->path protected $fp; // XML contents before being written to file. protected $buffer = ''; // Number of [TAB] to indent. protected $indent = 0; // File handling // ============= // Open the file resource for appending. public function open($path) { $isNew = !file_exists($path); if (!$this->fp = @fopen($path, 'ab')) { // "b" flag for binary mode. throw new Exception(sprintf('Could not open "%s" for writing!', $path)); } // Add the <?xml header if the file is newly created. if ($isNew) { $this->write('<?xml version="1.0" encoding="utf-8"?>'."\n"); } $this->path = $path; // Allow chaining return $this; } // Close the file resource. public function close($flush = true) { if ($flush) { $this->write($this->buffer); } return fclose($this->fp); } // Write to the file. public function write($value) { if (!fwrite($this->fp, $value)) { throw new Exception(sprintf('Could not write %d bytes to "%s"!', strlen($value), $this->path)); } // Allow chaining return $this; } // Flush the buffer to the file. public function flush() { $this->write($this->buffer); return $this; } // XML handling // ============ // Escapes a value before being stored in the XML tags. protected function escape($value) { if (is_numeric($value) || !$value) { return $value; } else { return '<![CDATA['.str_replace(']]>', ']]]]><![CDATA[>', $value).']]>'; } } public function addHeader() { return $this->add('?xml version="1.0" encoding="utf-8"?'); } public function add() { $args = func_get_args(); if (count($args) === 1) { $single = true; $tag = $args[0]; } else { $single = false; $tag = $args[0]; $value = $args[1]; } // If a value is not supplied, this means that we're adding a single tag. if ($single) { $this->buffer .= "<$tag>\n"; } else { $this->buffer .= "<$tag>".$this->escape($value)."</$tag>\n"; } return $this; } public function replace($tag, $value) { $this->buffer = str_replace('<' . $tag . '></' . $tag . '>', '<' . $tag . '>' . $this->escape($value) . '</' . $tag . '>', $this->buffer); } public function replaceLine($replace, $with) { $this->buffer = str_replace($replace, $with, $this->buffer); } public function __toString() { return $this->buffer; } }