| Current Path : /var/www/administrator/components/com_qf3/ |
| Current File : /var/www/administrator/components/com_qf3/script.php |
<?php
/**
* @Copyright ((c) plasma-web.ru
* @license GNU/GPL
*/
defined('_JEXEC') or die();
class com_qf3InstallerScript
{
public function install($parent)
{
$src = $parent->getParent()->getPath('source');
copy($src.'/demo/example1.css', JPATH_ROOT . '/components/com_qf3/assets/css/example1.css');
copy($src.'/demo/example2.css', JPATH_ROOT . '/components/com_qf3/assets/css/example2.css');
copy($src.'/demo/example3.css', JPATH_ROOT . '/components/com_qf3/assets/css/example3.css');
$status = $this->qfinstall($parent);
$this->installDemo();
$this->installationResults($status);
}
public function update($parent)
{
$status = $this->qfinstall($parent);
$this->updateResults($status);
}
public function qfinstall($parent) {
$db = JFactory::getDBO();
$manifest = $parent->getParent()->manifest;
$status = array();
$src = $parent->getParent()->getPath('source');
$plugins = $manifest->xpath('plugins/plugin');
foreach ($plugins as $plugin) {
$installer = new JInstaller;
$result = $installer->install($src.'/plugins/'.(string)$plugin->attributes()->plugin);
$query = "UPDATE #__extensions SET enabled=1 WHERE type='plugin' AND element=".$db->Quote((string)$plugin->attributes()->plugin)." AND folder=".$db->Quote((string)$plugin->attributes()->group);
$db->setQuery($query);
$db->execute();
$status[] = array('name' => 'plugin ' . (string)$plugin->attributes()->name, 'result' => $result);
}
$modules = $manifest->xpath('modules/module');
foreach ($modules as $module) {
$installer = new JInstaller;
$result = $installer->install($src.'/modules/'.(string)$module->attributes()->module);
$status[] = array('name' => 'module ' . (string)$module->attributes()->name, 'result' => $result);
}
return $status;
}
public function uninstall($parent) {
$db = JFactory::getDBO();
$status = array();
$manifest = $parent->getParent()->manifest;
$plugins = $manifest->xpath('plugins/plugin');
foreach ($plugins as $plugin)
{
$query = "SELECT `extension_id` FROM #__extensions WHERE `type`='plugin' AND element = ".$db->Quote((string)$plugin->attributes()->plugin)." AND folder = ".$db->Quote((string)$plugin->attributes()->group);
$db->setQuery($query);
$extensions = $db->loadColumn();
if (count($extensions))
{
foreach ($extensions as $id)
{
$installer = new JInstaller;
$result = $installer->uninstall('plugin', $id);
}
$status[] = array('name' => 'plugin ' . (string)$plugin->attributes()->name, 'result' => $result);
}
}
$modules = $manifest->xpath('modules/module');
foreach ($modules as $module)
{
$query = "SELECT `extension_id` FROM `#__extensions` WHERE `type`='module' AND element = ".$db->Quote((string)$module->attributes()->module)."";
$db->setQuery($query);
$extensions = $db->loadColumn();
if (count($extensions))
{
foreach ($extensions as $id)
{
$installer = new JInstaller;
$result = $installer->uninstall('module', $id);
}
$status[] = array('name' => 'module ' . (string)$module->attributes()->name, 'result' => $result);
}
}
$db->setQuery("DELETE FROM #__menu WHERE menutype = 'qf_hidden_admin'");
$db->execute();
$this->uninstallationResults($status);
}
private function uninstallationResults($status)
{
}
private function updateResults($status)
{
}
private function installationResults($status)
{
}
private function installDemo() {
// Example 1.
$res = $this->qfinsert(array(
'id' => 1,
'title' => 'Example 1. The simplest dependencies.',
'params' => '{"cssform":"example1.css","jsform":"qf3.js","thnq_message":"Thank you for your order. Our manager will contact you soon.","tmpl":"default","showtitle":"1","showurl":"1","history":"1"}'
), 'projects');
if($res) {
$this->qfinsert(array(
'id' => 1,
'title' => 'Main Group',
'fields' => '[{"fildnum":3,"teg":"customHtml","label":"<div class=\"ex_box\">\n<div class=\"ex_box_1\">"},{"teg":"username","fildnum":"10","custom":"placeholder=\"Your name *\" required","label":""},{"teg":"qfcalendar","fildnum":"5","format":"d-m-Y","label":"Convenient date"},{"fildnum":4,"teg":"customHtml","label":"</div>\n<div class=\"ex_box_2\">"},{"teg":"input[radio]","fildnum":"7","orient":"1","label":"How can we contact you?","options":[{"related":"2","label":"E-mail"},{"related":"3","label":"Phone"}]},{"fildnum":8,"teg":"customHtml","label":"</div>\n</div>"},{"teg":"input[checkbox]","fildnum":"9","pos":"1","related":"4","hide":"3","label":"I want to leave a comment"},{"teg":"input[checkbox]","fildnum":"11","custom":"class=\"qfbtn\"","related":"5","hide":"3","label":"Continue"}]',
'projectid' => 1,
'def' => 1
), 'forms');
$this->qfinsert(array(
'id' => 2,
'title' => 'E-mail',
'fields' => '[{"teg":"useremail","fildnum":"0","custom":"required placeholder=\"Your email address *\"","label":""}]',
'projectid' => 1,
'def' => 0
), 'forms');
$this->qfinsert(array(
'id' => 3,
'title' => 'Phone',
'fields' => '[{"teg":"userphone","fildnum":"0","custom":"required placeholder=\"Your phone number *\"","label":""}]',
'projectid' => 1,
'def' => 0
), 'forms');
$this->qfinsert(array(
'id' => 4,
'title' => 'Comment',
'fields' => '[{"teg":"textarea","fildnum":"0","custom":"placeholder=\"Your comment here\"","label":""}]',
'projectid' => 1,
'def' => 0
), 'forms');
$this->qfinsert(array(
'id' => 5,
'title' => 'Continue',
'fields' => '[{"fildnum":5,"teg":"customHtml","label":"<div class=\"qf_continue\">\n<div class=\"qf_title\">Select the supplier\'s office.</div>"},{"teg":"select","fildnum":"0","custom":"placeholder=\"Branch office\"","label":"","options":[{"label":"Arcadia"},{"related":"6","label":"Buyan"}]},{"fildnum":6,"teg":"customHtml","label":"<div class=\"qf_title\">Your address.</div>"},{"teg":"input[text]","fildnum":"1","custom":"required placeholder=\"Your country *\""},{"teg":"input[text]","fildnum":"8","custom":"required placeholder=\"Your city *\""},{"teg":"input[text]","fildnum":"2","custom":"required placeholder=\"Your address *\""},{"fildnum":10,"teg":"customHtml","label":"<div class=\"qf_tems\">"},{"teg":"input[checkbox]","fildnum":"9","pos":"1","custom":" required","related":"","hide":"1"},{"fildnum":7,"teg":"customHtml","label":"<div>I Agree to <a href=\"#\">Privacy Policy</a>\n</div>\n</div>\n</div>"},{"teg":"submit","fildnum":"3","custom":"class=\"qfsbm\""}]',
'projectid' => 1,
'def' => 0
), 'forms');
$this->qfinsert(array(
'id' => 6,
'title' => 'Note on Buyan.',
'fields' => '[{"fildnum":0,"teg":"customHtml","label":"<div class=\"note\">Delivery from Buyan is carried out from 100 500 tons.</div>"}]',
'projectid' => 1,
'def' => 0
), 'forms');
}
// Example 2.
$res = $this->qfinsert(array(
'id' => 2,
'title' => 'Example 2. The simplest pop-up.',
'params' => '{"cssform":"example2.css","jsform":"qf3.js","modal":1,"modallink":"Contact us","thnq_message":"Hi, {replacerName} .Thank you for your message. Expect a response shortly to the address you specify.","msgtmpl":1,"tmpl":"default","showtitle":1,"showurl":1,"history":1}'
), 'projects');
if($res) {
$this->qfinsert(array(
'id' => 7,
'title' => 'Main Group',
'fields' => '[{"fildnum":5,"teg":"customHtml","label":"<h1>Are you ready to contact us?</h1>"},{"teg":"username","fildnum":"0","custom":"placeholder=\"Your name *\" required autocomplete=\"on\""},{"teg":"useremail","fildnum":"1","custom":"placeholder=\"Your email address *\" required autocomplete=\"on\""},{"teg":"textarea","fildnum":"4","custom":"placeholder=\"Write your message *\" required"},{"teg":"qf_checkbox","fildnum":"3","pos":"1","custom":"required","hide":"1","label":"Please agree to our terms of use and privacy policy"},{"teg":"submit","fildnum":"2","custom":"class=\"btn\""}]',
'projectid' => 2,
'def' => 1
), 'forms');
}
// Example 3.
$res = $this->qfinsert(array(
'id' => 3,
'title' => 'Example 3. The simplest calculator.',
'params' => '{"cssform":"example3.css","jsform":"qf3.js","thnq_message":"Hi.","tmpl":"default","showtitle":1,"showurl":1,"calculatortype":"multipl","calcformula":"sv = {9.1}+0;\r\n9.2 = 2*3.14*{sv};\r\n9.3 = 3.14*{sv}*{sv};\r\n\r\ncv = {10.0}+0;\r\n10.1 = 4*{cv};\r\n10.2 = {cv}*{cv};\r\n\r\n8.3 = ({9.3}+{10.2})*{8.2}","history":1}'
), 'projects');
if($res) {
$this->qfinsert(array(
'id' => 8,
'title' => 'main',
'fields' => '[{"teg":"input[radio]","fildnum":"1","orient":"1","label":"What do you calculate?","options":[{"related":"9","label":"Circle"},{"related":"10","label":"Square"}]},{"fildnum":4,"teg":"customHtml","label":"<div class=\"qf_centr\">at 1 euro per sq. m.</div>"},{"teg":"qf_number","fildnum":"2","orient":"1","custom":" min=\"0\" value=\"1\"","math":"v","label":"Quantity"},{"teg":"calculatorSum","fildnum":"3","unit":"€","fixed":"2","label":"Total cost:"}]',
'projectid' => 3,
'def' => 1
), 'forms');
$this->qfinsert(array(
'id' => 9,
'title' => 'Circle',
'fields' => '[{"teg":"qf_range","fildnum":"1","custom":"value=\"38\"","math":"v","label":"Circle radius, m"},{"fildnum":4,"teg":"customHtml","label":"<hr>"},{"teg":"calculatorSum","fildnum":"2","pos":"1","unit":"m","fixed":"1","format":"2","class":"","label":"Perimeter:"},{"teg":"calculatorSum","fildnum":"3","pos":"1","unit":"m<sup>2</sup>","fixed":"1","format":"2","label":"Circle area:"},{"fildnum":5,"teg":"customHtml","label":"<hr>"}]',
'projectid' => 3,
'def' => 0
), 'forms');
$this->qfinsert(array(
'id' => 10,
'title' => 'Square',
'fields' => '[{"teg":"qf_range","fildnum":"0","custom":"value=\"38\"","math":"v","label":"Square side, m"},{"fildnum":3,"teg":"customHtml","label":"<hr>"},{"teg":"calculatorSum","fildnum":"1","pos":"1","unit":"m","fixed":"1","format":"2","class":"","label":"Perimeter:"},{"teg":"calculatorSum","fildnum":"2","pos":"1","unit":"m<sup>2</sup>","fixed":"1","format":"2","label":"Square area:"},{"fildnum":4,"teg":"customHtml","label":"<hr>"}]',
'projectid' => 3,
'def' => 0
), 'forms');
}
}
protected function qfinsert($columns, $tbl) {
$db = JFactory::getDBO();
$v_key='';
$v_value='';
foreach($columns as $key=>$value){
$v_key.=",$key";
$v_value.=is_int($v_value)?','.$value:','.$db->quote($value);
}
$v_key=substr($v_key, 1);
$v_value=substr($v_value, 1);
$db->setQuery('INSERT INTO #__qf3_'.$tbl.' ('.$v_key.') VALUES ('.$v_value.')');
$db->execute();
return $db->insertid();
}
public function preflight($type, $parent)
{
$filename = JPATH_ADMINISTRATOR .'/components/com_qf3/qf3.xml';
if(is_file($filename)) {
$xml = simplexml_load_file($filename);
$version = (int) preg_replace("/[^0-9]/", '', (string)$xml->version);
if($version <= 3007) {
$db = JFactory::getDBO();
$db->setQuery("UPDATE #__qf3_projects SET language = '' WHERE language = '*'");
if(!$db->execute()) return false;
$delfile[] = JPATH_ADMINISTRATOR . '/language/ru-RU/ru-RU.com_qf3.sys.ini';
$delfile[] = JPATH_ADMINISTRATOR . '/language/en-GB/en-GB.com_qf3.sys.ini';
foreach ($delfile as $file) {
if(file_exists($file)) unlink($file);
}
}
}
return true;
}
public function postflight($type, $parent)
{
$db = JFactory::getDBO();
$cnf = array('filesmod' => 0, 'shopmod' => 0);
$filename = JPATH_ROOT .'/components/com_qf3/qf3.php';
if(is_file($filename)) {
require_once($filename);
$config = new QuickForm\qf_config();
$cnf = $config->getconfig();
}
if(! $cnf['filesmod']) {
$db->setQuery("UPDATE #__menu SET menutype = 'qf_hidden_admin' WHERE title = 'QF_ATTACHMENT_SETTINGS'");
$db->execute();
}
if(! $cnf['shopmod']) {
$db->setQuery("UPDATE #__menu SET menutype = 'qf_hidden_admin' WHERE title = 'QF_SHOP_SETTINGS'");
$db->execute();
}
}
}