Your IP : 10.10.0.253


Current Path : /var/www/administrator/components/com_qf3/
Upload File :
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();
        }
    }

}