public function load_from_post()
 {
     global $website;
     // it can only be extension options!
     if (!empty($this->definition->options)) {
         foreach ($this->definition->options as $extension_option) {
             // get property info
             $property = new property();
             $property->load_from_object($extension_option, $this->settings->{$extension_option->id}, $this);
             $value = '';
             switch ($property->type) {
                 case 'text':
                 case 'textarea':
                     // multilang
                     $value = array();
                     foreach ($website->languages_list as $lang) {
                         $value[$lang] = $_REQUEST['property-' . $extension_option->id . '-' . $lang];
                     }
                     break;
                 case 'link':
                     // multilang and title+link
                     $value = array();
                     foreach ($website->languages_list as $lang) {
                         $value[$lang] = $_REQUEST['property-' . $extension_option->id . '-' . $lang . '-link'] . '##' . $_REQUEST['property-' . $extension_option->id . '-' . $lang . '-title'];
                     }
                     break;
                 case 'date':
                 case 'datetime':
                     $value = core_date2ts($_REQUEST['property-' . $extension_option->id]);
                     break;
                 case 'moption':
                     $value = implode(',', $_REQUEST['property-' . $extension_option->id]);
                     break;
                 case 'coordinates':
                     $value = $_REQUEST['property-' . $extension_option->id . '-latitude'] . '#' . $_REQUEST['property-' . $extension_option->id . '-longitude'];
                     break;
                 case 'boolean':
                     $value = 0;
                     if ($_REQUEST['property-' . $extension_option->id] == '1') {
                         $value = 1;
                     }
                     break;
                 default:
                     // direct value
                     $value = $_REQUEST['property-' . $extension_option->id];
             }
             $this->settings[$extension_option->id] = $value;
         }
     }
 }
Example #2
0
 /**
  * Check current form usage is safe for CSRF attack. Form must have <input type="hidden" name="csrf_token" value="{{system.csrf_token}}" />
  * @return bool
  */
 public function check()
 {
     $p_token = null;
     $c_token = $_SESSION['csrf_token']['data'];
     $referer = $_SERVER['HTTP_REFERER'];
     // raw prevent - analys referer header
     if ($referer != null && system::getInstance()->length($referer) > 0) {
         if (!system::getInstance()->prefixEquals($referer, property::getInstance()->get('script_url'))) {
             return false;
         }
     }
     if (system::getInstance()->length(system::getInstance()->post('csrf_token')) >= 32 && system::getInstance()->length(system::getInstance()->post('csrf_token')) <= 128) {
         $p_token = system::getInstance()->post('csrf_token');
     } elseif (system::getInstance()->length(system::getInstance()->get('csrf_token')) >= 32 && system::getInstance()->length(system::getInstance()->get('csrf_token')) <= 128) {
         $p_token = system::getInstance()->get('csrf_token');
     }
     if ($p_token == null) {
         return false;
     }
     if ($c_token == null) {
         return false;
     }
     if ($c_token != $p_token) {
         return false;
     }
     return true;
 }
Example #3
0
 public function init()
 {
     if (database::getInstance()->isDown() || !property::getInstance()->get('collect_statistic')) {
         return;
     }
     $realip = system::getInstance()->getRealIp();
     $visittime = time();
     $browser = self::user_browser($_SERVER['HTTP_USER_AGENT']);
     $os = self::user_os($_SERVER['HTTP_USER_AGENT']);
     $cookie = $_COOKIE['source'] ?: '';
     $userid = user::getInstance()->get('id');
     if ($userid == null) {
         $userid = 0;
     }
     if ($cookie == null) {
         $settime = $visittime + 365 * 24 * 60 * 60;
         setcookie('source', system::getInstance()->md5random(), $settime, '/');
         $cookie = '';
     }
     $referer = $_SERVER['HTTP_REFERER'] ?: '';
     $path = $_SERVER['REQUEST_URI'] ?: '';
     $query = "INSERT INTO " . property::getInstance()->get('db_prefix') . "_statistic (ip, cookie, browser, os, time, referer, path, reg_id) VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
     $stmt = database::getInstance()->con()->prepare($query);
     $stmt->bindParam(1, $realip, \PDO::PARAM_STR);
     $stmt->bindParam(2, $cookie, \PDO::PARAM_STR, 32);
     $stmt->bindParam(3, $browser, \PDO::PARAM_STR);
     $stmt->bindParam(4, $os, \PDO::PARAM_STR);
     $stmt->bindParam(5, $visittime, \PDO::PARAM_INT);
     $stmt->bindParam(6, $referer, \PDO::PARAM_STR);
     $stmt->bindParam(7, $path, \PDO::PARAM_STR);
     $stmt->bindParam(8, $userid, \PDO::PARAM_INT);
     $stmt->execute();
 }
Example #4
0
 /**
  * Check if user is permament banned in database and display ban.tpl theme
  */
 public function init()
 {
     $ip = system::getInstance()->getRealIp();
     $time = time();
     $userid = user::getInstance()->get('id');
     if ($userid > 0) {
         $stmt = database::getInstance()->con()->prepare("SELECT COUNT(*) FROM " . property::getInstance()->get('db_prefix') . "_user_block WHERE (user_id = ? or ip = ?) AND (express > ? OR express = 0)");
         $stmt->bindParam(1, $userid, \PDO::PARAM_INT);
         $stmt->bindParam(2, $ip, \PDO::PARAM_STR);
         $stmt->bindParam(3, $time, \PDO::PARAM_INT);
         $stmt->execute();
     } else {
         $stmt = database::getInstance()->con()->prepare("SELECT COUNT(*) FROM " . property::getInstance()->get('db_prefix') . "_user_block WHERE ip = ? AND (express > ? OR express = 0)");
         $stmt->bindParam(1, $ip, \PDO::PARAM_STR);
         $stmt->bindParam(2, $time, \PDO::PARAM_INT);
         $stmt->execute();
     }
     $rowFetch = $stmt->fetch();
     $count = $rowFetch[0];
     if ($count > 0) {
         // block founded in db
         $content = template::getInstance()->twigRender('ban.tpl', array('local' => array('admin_email' => property::getInstance()->get('mail_from'))));
         template::getInstance()->justPrint($content);
     }
 }
Example #5
0
 /**
  * Set use langauge for this session. As default this function was called from router on build process.
  * @param string $language
  */
 public function setUseLanguage($language)
 {
     $file = root . '/language/' . $language . '.ini';
     $addfile = root . '/language/' . $language . '.custom.ini';
     $this->getLanguageFile($file);
     $this->getLanguageFile($addfile);
     // additional theme lang file
     $theme_langfile = root . '/' . property::getInstance()->get('tpl_dir') . '/' . property::getInstance()->get('tpl_name') . '/' . $language . '.ini';
     $this->getLanguageFile($theme_langfile);
     $this->userLang = $language;
 }
Example #6
0
 public function compile()
 {
     template::getInstance()->set(template::TYPE_META, 'description', system::getInstance()->altimplode('. ', $this->metadata['description']));
     template::getInstance()->set(template::TYPE_META, 'keywords', system::getInstance()->altimplode('. ', $this->metadata['keywords']));
     template::getInstance()->set(template::TYPE_META, 'global_title', $this->metadata['global_title']);
     if (property::getInstance()->get('multi_title')) {
         template::getInstance()->set(template::TYPE_META, 'title', system::getInstance()->altimplode(" - ", array_reverse($this->metadata['title'])));
     } else {
         template::getInstance()->set(template::TYPE_META, 'title', array_pop($this->metadata['title']));
     }
     template::getInstance()->set(template::TYPE_META, 'generator', 'FFCMS engine: ffcms.ru. Version: ' . version);
 }
    public function delete()
    {
        global $DB;
        // remove all old entries
        if (!empty($this->id)) {
            $DB->execute('
 				DELETE FROM nv_comments
				 WHERE id = ' . intval($this->id) . '
               LIMIT 1 ');
            // remove all properties of the comment
            property::remove_properties('comment', $this->id);
        }
        return $DB->get_affected_rows();
    }
Example #8
0
 public function make()
 {
     if (!property::getInstance()->get('maintenance')) {
         // is not a maintenance mod
         return;
     }
     if (permission::getInstance()->have('admin/main')) {
         // not show for admin
         return;
     }
     $login_form = extension::getInstance()->call(extension::TYPE_COMPONENT, 'user')->viewLogin();
     // call to login view & worker
     $tpl = template::getInstance()->twigRender('maintenance.tpl', array('login_form' => $login_form));
     // render with login form
     template::getInstance()->justPrint($tpl, array());
 }
Example #9
0
 public function init()
 {
     if (is_null($this->link)) {
         if (file_exists(root . '/config.php')) {
             try {
                 $this->link = @new \PDO("mysql:host=" . property::getInstance()->get('db_host') . ";dbname=" . property::getInstance()->get('db_name') . "", property::getInstance()->get('db_user'), property::getInstance()->get('db_pass'), array(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, \PDO::ATTR_EMULATE_PREPARES => false, \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::ATTR_PERSISTENT => false));
             } catch (\PDOException $e) {
                 if (loader != 'install') {
                     logger::getInstance()->log(logger::LEVEL_ERR, "Database is down! Check configuration and database server uplink! Log: " . $e->getMessage());
                     exit(language::getInstance()->get('database_down_desc') . " " . property::getInstance()->get('mail_from'));
                 }
             }
         } else {
             logger::getInstance()->log(logger::LEVEL_ERR, "Configuration file /config.php is not available - database connect FAIL!");
         }
     }
 }
Example #10
0
function settings_form()
{
    global $user;
    global $DB;
    $navibars = new navibars();
    $naviforms = new naviforms();
    $navibars->title(t(14, 'Settings'));
    $navibars->add_actions('<a href="#" onclick="navigate_tabform_submit(0);"><img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . '</a>');
    $navibars->form();
    $navibars->add_tab(t(43, "General"));
    $navibars->add_tab_content($naviforms->hidden('form-sent', 'true'));
    $navibars->add_tab_content_row(array('<label>ID</label>', '<span>' . $user->id . '</span>'));
    $navibars->add_tab_content_row(array('<label>' . t(1, 'User') . '</label>', '<span>' . $user->username . '</span>'));
    $navibars->add_tab_content_row(array('<label>' . t(2, 'Password') . '</label>', '<input type="password" name="user-password" value="" size="32" />', '<span class="navigate-form-row-info">' . t(48, "Leave blank to keep the current value") . '</span>'));
    $navibars->add_tab_content_row(array('<label>' . t(44, 'E-Mail') . '</label>', $naviforms->textfield('user-email', $user->email)));
    if ($user->profile == 1 && false) {
        // Profile selector
        $DB->query('SELECT id, name FROM nv_profiles');
        $data = $DB->result();
        $select = $naviforms->select_from_object_array('user-profile', $data, 'id', 'name', $user->profile);
        $navibars->add_tab_content_row(array('<label>' . t(45, 'Profile') . '</label>', $select));
    } else {
        $user_profile_name = $DB->query_single('name', 'nv_profiles', ' id = ' . intval($user->profile));
        $navibars->add_tab_content_row(array('<label>' . t(45, 'Profile') . '</label>', '<span>' . $user_profile_name . '</span>'));
    }
    // Language selector
    $DB->query('SELECT code, name FROM nv_languages WHERE nv_dictionary != ""');
    $data = $DB->result();
    $select = $naviforms->select_from_object_array('user-language', $data, 'code', 'name', $user->language);
    $navibars->add_tab_content_row(array('<label>' . t(46, 'Language') . '</label>', $select));
    $timezones = property::timezones();
    if (empty($user->timezone)) {
        $user->timezone = date_default_timezone_get();
    }
    $navibars->add_tab_content_row(array('<label>' . t(97, 'Timezone') . '</label>', $naviforms->selectfield("user-timezone", array_keys($timezones), array_values($timezones), $user->timezone)));
    // Decimal separator
    $data = array(0 => json_decode('{"code": ",", "name": ", ---> 1234,25"}'), 1 => json_decode('{"code": ".", "name": ". ---> 1234.25"}'), 2 => json_decode('{"code": "\'", "name": "\' ---> 1234\'25"}'));
    $select = $naviforms->select_from_object_array('user-decimal_separator', $data, 'code', 'name', $user->decimal_separator);
    $navibars->add_tab_content_row(array('<label>' . t(49, 'Decimal separator') . '</label>', $select));
    // Date format
    $data = array(0 => json_decode('{"code": "Y-m-d H:i", "name": "' . date(Y) . '-12-31 23:59"}'), 1 => json_decode('{"code": "d-m-Y H:i", "name": "31-12-' . date(Y) . ' 23:59"}'), 2 => json_decode('{"code": "m-d-Y H:i", "name": "12-31-' . date(Y) . ' 23:59"}'), 3 => json_decode('{"code": "Y/m/d H:i", "name": "' . date(Y) . '/12/31 23:59"}'), 4 => json_decode('{"code": "d/m/Y H:i", "name": "31/12/' . date(Y) . ' 23:59"}'), 5 => json_decode('{"code": "m/d/Y H:i", "name": "12/31/' . date(Y) . ' 23:59"}'));
    $select = $naviforms->select_from_object_array('user-date_format', $data, 'code', 'name', $user->date_format);
    $navibars->add_tab_content_row(array('<label>' . t(50, 'Date format') . '</label>', $select));
    return $navibars->generate();
}
Example #11
0
function extensions_options($extension, $saved = null)
{
    global $layout;
    global $website;
    global $events;
    $layout = null;
    $layout = new layout('navigate');
    if ($saved !== null) {
        if ($saved) {
            $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check');
        } else {
            $layout->navigate_notification(t(56, "Unexpected error"), true, true);
        }
    }
    $navibars = new navibars();
    $naviforms = new naviforms();
    $navibars->title(t(327, 'Extensions'));
    $layout->navigate_media_browser();
    // we can use media browser in this function
    $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_media_browser();"><img height="16" align="absmiddle" width="16" src="img/icons/silk/images.png"> ' . t(36, 'Media') . '</a>'));
    $navibars->add_actions(array('<a href="#" onclick="navigate_tabform_submit(0);"><img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . '</a>'));
    $navibars->form();
    $navibars->add_tab(t(7, 'Configuration'));
    $navibars->add_tab_content($naviforms->hidden('form-sent', 'true'));
    // show a language selector (only if it's a multi language website and has properties)
    if (!empty($extension->definition->options) && count($website->languages) > 1) {
        $website_languages_selector = $website->languages();
        $website_languages_selector = array_merge(array('' => '(' . t(443, 'All') . ')'), $website_languages_selector);
        $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $website_languages_selector, '', "navigate_tabform_language_selector(this);")), "navigate-form-language_selector");
        // hide languages selector if there isn't a multilanguage property
        $layout->add_script('
			$(document).ready(function()
		    {
				if($("#navigate-content-tabs-1 .navigate-form-row[lang]").length < 1)
				{
					$("#navigate-form-language_selector").css("display", "none");
				}
		    });
	    ');
    }
    foreach ($extension->definition->options as $option) {
        $property = new property();
        $property->load_from_object($option, $extension->settings[$option->id], $extension);
        if ($property->type == 'tab') {
            $navibars->add_tab($property->name);
            if (count($website->languages) > 1) {
                $website_languages_selector = $website->languages();
                $website_languages_selector = array_merge(array('' => '(' . t(443, 'All') . ')'), $website_languages_selector);
                $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $website_languages_selector, '', "navigate_tabform_language_selector(this);")));
            }
        }
        if ($property->type == 'function') {
            $fname = $option->dvalue;
            if (empty($fname)) {
                $fname = $option->function;
            }
            // load the extension source code, if not already done
            extension::include_php($extension->code);
            if (!function_exists($fname)) {
                continue;
            }
            call_user_func($fname, array('extension' => $extension, 'navibars' => $navibars, 'naviforms' => $naviforms));
        } else {
            $navibars->add_tab_content(navigate_property_layout_field($property, $extension));
        }
    }
    $layout->add_content('<div id="navigate-content" class="navigate-content ui-corner-all">' . $navibars->generate() . '</div>');
    $layout->navigate_additional_scripts();
    navigate_property_layout_scripts();
    // add javascript to enable special buttons and functions (Copy from, etc.)
    $layout->add_script('
        $("html").css("background", "transparent");
    ');
    $out = $layout->generate();
    return $out;
}
function navigate_property_layout_field($property, $object = "", $website_id = "")
{
    global $website;
    global $layout;
    global $theme;
    global $user;
    global $DB;
    $ws = $website;
    $ws_theme = $theme;
    if (!empty($website_id) && $website_id != $website->id) {
        $ws = new website();
        $ws->load($website_id);
        $ws_theme = new theme();
        $ws_theme->load($ws->theme);
    }
    // object used for translations (theme or extension)
    if (empty($object)) {
        $object = $ws_theme;
    }
    $naviforms = new naviforms();
    $langs = $ws->languages_list;
    $field = array();
    if (!isset($property->value)) {
        $property->value = $property->dvalue;
    }
    if (!isset($property->multilanguage)) {
        $property->multilanguage = 'false';
    }
    $property_name = $property->name;
    if (!empty($object)) {
        $property_name = $object->t($property_name);
    }
    if (in_array($property->type, array("text", "textarea", "rich_textarea", "link")) || $property->multilanguage == 'true') {
        if (!isset($property->multilanguage) || $property->multilanguage !== false || $property->multilanguage == "false") {
            $property->multilanguage = 'true';
        } else {
            $property->multilanguage = 'false';
        }
        if (is_object($property->value)) {
            $property->value = (array) $property->value;
        }
        if (!is_array($property->value)) {
            $property->value = array();
        }
        foreach ($langs as $lang) {
            if (!isset($property->value[$lang]) && isset($property->dvalue)) {
                $property->value[$lang] = $property->dvalue;
            }
        }
    }
    // auto show/hide properties by other properties values --> "conditional": [ { "source_property_id" : [value1,"value2"] } ]
    if (!empty($property->conditional)) {
        foreach ($property->conditional as $conditional) {
            foreach ($conditional as $conditional_property => $conditional_values) {
                if (!is_array($conditional_values)) {
                    $conditional_values = array($conditional_values);
                }
                $conditional_values = '["' . implode('", "', $conditional_values) . '"]';
                $layout->add_script('
                    navigate_tabform_conditional_property("' . $property->id . '", "' . $conditional_property . '", ' . $conditional_values . ');
                ');
            }
        }
    }
    switch ($property->type) {
        case 'value':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->textfield("property-" . $property->id, $property->value);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'decimal':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->decimalfield("property-" . $property->id, $property->value, $property->precision, $user->decimal_separator, $user->thousands_separator, @$property->prefix, @$property->suffix);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'rating':
            $default = explode('#', $property->dvalue);
            $stars = $default[1];
            if (empty($stars)) {
                $stars = 5;
            }
            $inputs = $stars * 2;
            // half stars ALWAYS enabled
            if ($property->value == $property->dvalue) {
                $property->value = intval($default[0]) * 2;
            }
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '" style=" height: 18px; ">';
            $field[] = '<label>' . $property_name . '</label>';
            for ($i = 1; $i <= $inputs; $i++) {
                $checked = '';
                if ($property->value == $i) {
                    $checked = ' checked="checked" ';
                }
                $field[] = '<input type="radio" name="property-' . $property->id . '" class="star {split:2}" value="' . $i . '" ' . $checked . ' />';
            }
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'boolean':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->checkbox("property-" . $property->id, $property->value == '1');
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'option':
            $options = $property->options;
            if (is_string($options)) {
                $options = mb_unserialize($options);
            } else {
                if (is_object($options)) {
                    $options = (array) $options;
                }
            }
            // translate each option text
            if (!empty($object) && !empty($options)) {
                foreach ($options as $value => $text) {
                    $options[$value] = $object->t($text);
                }
            }
            if (!isset($property->option_html)) {
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
                $field[] = '<label>' . $property_name . '</label>';
                $field[] = $naviforms->selectfield("property-" . $property->id, array_keys($options), array_values($options), $property->value);
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
            } else {
                // each option formatted in a specific html fragment
                if (isset($property->stylesheet)) {
                    $custom_stylesheet = $property->stylesheet;
                    if (strpos($custom_stylesheet, 'http') === false) {
                        $custom_stylesheet = NAVIGATE_URL . '/themes/' . $ws->theme . '/' . $custom_stylesheet . '?bogus=' . time();
                    }
                    $layout->add_style_tag($custom_stylesheet, false);
                    if (empty($options)) {
                        $custom_stylesheet_contents = file_get_contents(NAVIGATE_PATH . '/themes/' . $ws->theme . '/' . $property->stylesheet);
                        $custom_stylesheet_contents = stylesheet_parse($custom_stylesheet_contents);
                        $options = array();
                        if (is_array($custom_stylesheet_contents)) {
                            foreach ($custom_stylesheet_contents as $rule => $rule_content) {
                                if (in_array(substr($rule, 0, 1), array('.', '#'))) {
                                    $rule = str_replace(array('.', '#', ':before', ':after', ':focus', ':visited'), '', $rule);
                                    $options[$rule] = $rule;
                                    if (!empty($object)) {
                                        $options[$rule] = $object->t($rule);
                                    }
                                }
                            }
                        }
                    }
                }
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
                $field[] = '<label>' . $property_name . '</label>';
                $field[] = $naviforms->selectfield("property-" . $property->id, array_keys($options), array_values($options), $property->value, NULL, false, NULL, NULL, false, false);
                $layout->add_script('
					$("#property-' . $property->id . '").select2(
				        {
				            selectOnBlur: true,
				            minimumResultsForSearch: 6,
							escapeMarkup: function (markup)
					        {
					            return markup; // let our custom formatter work
					        },
					        templateSelection: function(row)
					        {					        
					            var option_html = "' . str_replace('"', '\\"', $property->option_html) . '";
					            option_html = option_html.replace(/{{VALUE}}/g, row.id);
					            option_html = option_html.replace(/{{TEXT}}/g, row.text);
					        
					            if(row.id)
					                return option_html;
					            else
					                return "("  + navigate_t(581, "None") + ")";
					        },
					        templateResult: function(data)
					        {
					            var option_html = "' . str_replace('"', '\\"', $property->option_html) . '";
					            option_html = option_html.replace(/{{VALUE}}/g, data.id);
					            option_html = option_html.replace(/{{TEXT}}/g, data.text);
					        
					            if(data.id)
					                return option_html;
					            else
					                return "("  + navigate_t(581, "None") + ")";
					        }
				        }
				    );
			    ');
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
            }
            break;
        case 'moption':
            $options = $property->options;
            if (is_string($options)) {
                $options = mb_unserialize($options);
            } else {
                if (is_object($options)) {
                    $options = (array) $options;
                }
            }
            // translate each option text
            if (!empty($object)) {
                foreach ($options as $value => $text) {
                    $options[$value] = $object->t($text);
                }
            }
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->selectfield("property-" . $property->id, array_keys($options), array_values($options), explode(',', $property->value), "", true);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'country':
            $options = property::countries();
            $country_codes = array_keys($options);
            $country_names = array_values($options);
            // include "country not defined" item
            array_unshift($country_codes, '');
            array_unshift($country_names, '(' . t(307, "Unspecified") . ')');
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->selectfield("property-" . $property->id, $country_codes, $country_names, strtoupper($property->value));
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'coordinates':
            $coordinates = explode('#', $property->value);
            $latitude = @$coordinates[0];
            $longitude = @$coordinates[1];
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->textfield("property-" . $property->id . '-latitude', $latitude, '182px');
            $field[] = $naviforms->textfield("property-" . $property->id . '-longitude', $longitude, '182px');
            $field[] = '<img src="img/icons/silk/map_magnify.png" align="absmiddle" hspace="3px" id="property-' . $property->id . '-show" />';
            $field[] = '<div id="property-' . $property->id . '-map-container" style=" display: none; ">';
            $field[] = '	<div class="navigate-form-row" id="property-' . $property->id . '-search" style=" width: 278px; height: 24px; margin-top: 9px; margin-left: 40px; position: absolute; z-index: 1000; opacity: 0.95; ">';
            $field[] = '		<input type="text" name="property-' . $property->id . '-search-text" style=" width: 240px; " /> ';
            $field[] = '		<img class="ui-widget ui-button ui-state-default ui-corner-all" sprite="false" style=" cursor: pointer; padding: 3px; " src="' . NAVIGATE_URL . '/img/icons/silk/zoom.png" align="right" />';
            $field[] = '	</div>';
            $field[] = '	<div id="property-' . $property->id . '-map" style=" width: 400px; height: 200px; "></div>';
            $field[] = '</div>';
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            $layout->add_script('
                // auto parse standard Google Maps URLs when pasting them in the latitude field
                $("#property-' . $property->id . '-latitude").on("keyup", function()
                {
                    var value = $(this).val();                                        
                    if(value.indexOf("https://www.google")==0)
                    {                    
                        // locate the @ symbol
                        value = value.substr(value.indexOf("@")+1);
                        value = value.substr(0, value.indexOf("z"));
                        value = value.split(",");
                                                                        
                        if(value.length == 3) // parsed values seem fine
                        {
                            $("#property-' . $property->id . '-latitude").val(value[0]);                            
                            $("#property-' . $property->id . '-longitude").val(value[1]);                            
                        }
                    }
                });
            ');
            $layout->add_script('
				var property_' . $property->id . '_lmap = null;
			    var marker = null;
			    
			    L.Icon.Default.imagePath = "' . NAVIGATE_URL . '/lib/external/leaflet/images";
			    
			    // initialize leaflet map
                property_' . $property->id . '_lmap = L.map(
                    "property-' . $property->id . '-map",
                    {
                        doubleClickZoom: false
                    }
                );					    
                
                // create the tile layer with correct attribution
                var osmUrl = "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";
                var osmAttrib = "Map data Ā© <a href=\\"http://openstreetmap.org\\">OpenStreetMap</a> contributors";
                var osm = new L.TileLayer(osmUrl, {minZoom: 0, maxZoom: 19, attribution: osmAttrib });
                
                property_' . $property->id . '_lmap.addLayer(osm);
							
				$("#property-' . $property->id . '-search input").on("keyup", function(e)
				{	if(e.keyCode == 13)	property' . $property->id . 'search();	});
				
				$("#property-' . $property->id . '-search img").on("click", property' . $property->id . 'search);
				
				$("#property-' . $property->id . '-show").on("click", function()
				{
					var myLatlng = new L.LatLng(
					    $("#property-' . $property->id . '-latitude").val(),
					    $("#property-' . $property->id . '-longitude").val()
					);																
												
                    property_' . $property->id . '_lmap.setView(myLatlng, 17);
	                
	                marker = L.marker(myLatlng).addTo(property_' . $property->id . '_lmap);
	                
	                property_' . $property->id . '_lmap.on("dblclick", function(e)
	                {	                    
                        $("#property-' . $property->id . '-latitude").val(e.latlng.lat);
						$("#property-' . $property->id . '-longitude").val(e.latlng.lng)
	                    
	                    marker.remove();
	                    marker = L.marker(e.latlng).addTo(property_' . $property->id . '_lmap);                        
	                });
					                    
					$("#property-' . $property->id . '-map-container").dialog(
					{
						width: 600,
						height: 400,
						title: "' . t(300, 'Map') . ': ' . t(301, 'Double click a place to set the coordinates') . '",
						resize: property' . $property->id . 'resize,
						open: function()
						{
						    $(this).css("padding", 0);
						    property_' . $property->id . '_lmap.invalidateSize();
                        }
                    }).dialogExtend(
					{
						maximizable: true,
						"maximize" : property' . $property->id . 'resize,
						"restore" : property' . $property->id . 'resize
					});
					
					property' . $property->id . 'resize();

				}).css("cursor", "pointer");	
				
				function property' . $property->id . 'resize()
				{
					$("#property-' . $property->id . '-map").width($("#property-' . $property->id . '-map-container").width()); 
					$("#property-' . $property->id . '-map").height($("#property-' . $property->id . '-map-container").height());	
					property_' . $property->id . '_lmap.invalidateSize();
				}
				
				function property' . $property->id . 'search()
				{				
					var address = $("#property-' . $property->id . '-search input").val();

                    $.getJSON("http://services.gisgraphy.com/geocoding/geocode?format=json&callback=?&address="+address, function(data)
                    {                                    
                        if(!data.result || data.result.length < 1)
                            alert("Geocode was not successful for the following reason: " + status);
                        else
                        {
                            property_' . $property->id . '_lmap.setView([data.result[0].lat, data.result[0].lng], 19);
                        }
                    });						        

					return false;
				}		
                
			');
            break;
        case 'text':
            foreach ($langs as $lang) {
                if (!is_array($property->value)) {
                    $ovalue = $property->value;
                    $property->value = array();
                    foreach ($langs as $lang_value) {
                        $property->value[$lang_value] = $ovalue;
                    }
                }
                $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>';
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '" lang="' . $lang . '">';
                $field[] = '<label>' . $property_name . ' ' . $language_info . '</label>';
                $field[] = $naviforms->textfield("property-" . $property->id . "-" . $lang, $property->value[$lang]);
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
            }
            break;
        case 'textarea':
            foreach ($langs as $lang) {
                if (!is_array($property->value)) {
                    $ovalue = $property->value;
                    $property->value = array();
                    foreach ($langs as $lang_value) {
                        $property->value[$lang_value] = $ovalue;
                    }
                }
                $style = "";
                if (!empty($property->width)) {
                    $style = ' width: ' . $property->width . 'px; ';
                }
                $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>';
                if ($property->multilanguage == 'false') {
                    $language_info = '';
                }
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '" lang="' . $lang . '">';
                $field[] = '<label>' . $property_name . ' ' . $language_info . '</label>';
                $field[] = $naviforms->textarea("property-" . $property->id . "-" . $lang, $property->value[$lang], 4, 48, $style);
                $field[] = '<button class="navigate-form-row-property-action" data-field="property-' . $property->id . '-' . $lang . '" data-action="copy-from" title="' . t(189, 'Copy from') . 'ā€¦"><img src="img/icons/silk/page_white_copy.png" align="absmiddle"></button>';
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
                if ($property->multilanguage == 'false') {
                    break;
                }
            }
            break;
        case 'rich_textarea':
            foreach ($langs as $lang) {
                if (!is_array($property->value)) {
                    $ovalue = $property->value;
                    $property->value = array();
                    foreach ($langs as $lang_value) {
                        $property->value[$lang_value] = $ovalue;
                    }
                }
                $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>';
                if ($property->multilanguage == 'false') {
                    $language_info = '';
                }
                $width = NULL;
                if (!empty($property->width)) {
                    $width = $property->width . 'px';
                }
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '" lang="' . $lang . '">';
                $field[] = '<label>' . $property_name . ' ' . $language_info . '</label>';
                $field[] = $naviforms->editorfield("property-" . $property->id . "-" . $lang, $property->value[$lang], $width, NULL, $website_id);
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                // additional control buttons
                $translate_menu = '';
                if (!empty($translate_extensions)) {
                    $translate_extensions_titles = array();
                    $translate_extensions_actions = array();
                    foreach ($translate_extensions as $te) {
                        if ($te['enabled'] == '0') {
                            continue;
                        }
                        $translate_extensions_titles[] = $te['title'];
                        $translate_extensions_actions[] = 'javascript: navigate_tinymce_translate_' . $te['code'] . '(\'property-' . $property->id . '-' . $lang . '\', \'' . $lang . '\');';
                    }
                    if (!empty($translate_extensions_actions)) {
                        $translate_menu = $naviforms->splitbutton('translate_' . $lang, '<img src="img/icons/silk/comment.png" align="absmiddle"> ' . t(188, 'Translate'), $translate_extensions_actions, $translate_extensions_titles);
                    }
                }
                $field[] = '<div style="clear:both; margin-top:5px; float:left; margin-bottom: 10px;">';
                $field[] = '<label>&nbsp;</label>';
                $field[] = $translate_menu;
                $field[] = '<button class="navigate-form-row-property-action" data-field="property-' . $property->id . '-' . $lang . '" data-action="copy-from"><img src="img/icons/silk/page_white_copy.png" align="absmiddle">' . t(189, 'Copy from') . '...</button> ';
                $field[] = !empty($theme->content_samples) ? '<button onclick="navigate_items_copy_from_theme_samples(\'property-' . $property->id . '-' . $lang . '\', \'' . $property->id . '\', \'' . $lang . '\', \'tinymce\'); return false;"><img src="img/icons/silk/rainbow.png" align="absmiddle"> ' . t(553, 'Fragments') . ' | ' . $theme->title . '</button> ' : '';
                $field[] = '</div>';
                $field[] = '</div>';
                // divformrow
                if ($property->multilanguage == 'false') {
                    break;
                }
            }
            break;
        case 'color':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->colorfield("property-" . $property->id, $property->value, @$property->options);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'date':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->datefield("property-" . $property->id, $property->value, false);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'datetime':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->datefield("property-" . $property->id, $property->value, true);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'source_code':
            if ($property->multilanguage != 'true' && $property->multilanguage != '1') {
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
                $field[] = '<label>' . $property_name . '</label>';
                $field[] = $naviforms->scriptarea("property-" . $property->id, $property->value);
                $field[] = '&nbsp;<button class="navigate-form-row-property-action" data-field="property-' . $property->id . '-' . $lang . '" data-action="copy-from" title="' . t(189, 'Copy from') . 'ā€¦"><img src="img/icons/silk/page_white_copy.png" align="absmiddle"></button>';
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
            } else {
                foreach ($langs as $lang) {
                    if (!is_array($property->value)) {
                        $ovalue = $property->value;
                        $property->value = array();
                        foreach ($langs as $lang_value) {
                            $property->value[$lang_value] = $ovalue;
                        }
                    }
                    $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>';
                    $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '" lang="' . $lang . '">';
                    $field[] = '<label>' . $property_name . ' ' . $language_info . '</label>';
                    $field[] = $naviforms->scriptarea("property-" . $property->id . "-" . $lang, $property->value[$lang]);
                    $field[] = '&nbsp;<button class="navigate-form-row-property-action" data-field="property-' . $property->id . '-' . $lang . '" data-action="copy-from" title="' . t(189, 'Copy from') . 'ā€¦"><img src="img/icons/silk/page_white_copy.png" align="absmiddle"></button>';
                    if (!empty($property->helper)) {
                        $helper_text = $property->helper;
                        if (!empty($object)) {
                            $helper_text = $object->t($helper_text);
                        }
                        $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                    }
                    $field[] = '</div>';
                }
            }
            break;
        case 'link':
            foreach ($langs as $lang) {
                if (!is_array($property->value)) {
                    $ovalue = $property->value;
                    $property->value = array();
                    foreach ($langs as $lang_value) {
                        $property->value[$lang_value] = $ovalue;
                    }
                }
                $link = explode('##', $property->value[$lang]);
                if (is_array($link)) {
                    $target = @$link[2];
                    $title = @$link[1];
                    $link = $link[0];
                    if (empty($title)) {
                        $title = $link;
                    }
                } else {
                    $title = $property->value[$lang];
                    $link = $property->value[$lang];
                    $target = '_self';
                }
                $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>';
                if ($property->multilanguage == 'false') {
                    $language_info = '';
                }
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '" lang="' . $lang . '" style="margin-bottom: 0px;">';
                $field[] = '<label>' . $property_name . ' ' . $language_info . '</label>';
                $field[] = $naviforms->textfield("property-" . $property->id . "-" . $lang . "-title", $title);
                $field[] = '<span class="navigate-form-row-info">' . t(67, 'Title') . '</span>';
                $field[] = '</div>';
                $field[] = '<div class="navigate-form-row" lang="' . $lang . '" style="margin-bottom: 0px;" nv_property="' . $property->id . '" >';
                $field[] = '<label>&nbsp;</label>';
                $field[] = $naviforms->textfield("property-" . $property->id . "-" . $lang . "-link", $link);
                $field[] = '<span class="navigate-form-row-info">' . t(197, 'Link') . '</span>';
                $field[] = '</div>';
                $field[] = '<div class="navigate-form-row" lang="' . $lang . '" nv_property="' . $property->id . '" >';
                $field[] = '<label>&nbsp;</label>';
                $field[] = $naviforms->selectfield("property-" . $property->id . "-" . $lang . "-target", array('_self', '_blank'), array(t(173, "Follow URL"), t(174, "Open URL (new window)")), $target);
                $field[] = '<span class="navigate-form-row-info">' . t(172, 'Action') . '</span>';
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
                if ($property->multilanguage == 'false') {
                    break;
                }
            }
            break;
        case 'image':
            if ($property->multilanguage != 'true' && $property->multilanguage != '1') {
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
                $field[] = '<label>' . $property_name . '</label>';
                $field[] = $naviforms->dropbox("property-" . $property->id, $property->value, "image", false, @$property->dvalue, @$property->options, $website_id);
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
            } else {
                foreach ($langs as $lang) {
                    if (!is_array($property->value)) {
                        $ovalue = $property->value;
                        $property->value = array();
                        foreach ($langs as $lang_value) {
                            $property->value[$lang_value] = $ovalue;
                        }
                    }
                    $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>';
                    $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '" lang="' . $lang . '">';
                    $field[] = '<label>' . $property_name . ' ' . $language_info . '</label>';
                    $field[] = $naviforms->dropbox("property-" . $property->id . "-" . $lang, $property->value[$lang], "image", false, @$property->dvalue, $website_id);
                    if (!empty($property->helper)) {
                        $helper_text = $property->helper;
                        if (!empty($object)) {
                            $helper_text = $object->t($helper_text);
                        }
                        $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                    }
                    $field[] = '</div>';
                }
            }
            break;
        case 'video':
            if ($property->multilanguage != 'true' && $property->multilanguage != '1') {
                $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
                $field[] = '<label>' . $property_name . '</label>';
                $field[] = $naviforms->dropbox("property-" . $property->id, $property->value, "video", false, $property->dvalue, $website_id);
                if (!empty($property->helper)) {
                    $helper_text = $property->helper;
                    if (!empty($object)) {
                        $helper_text = $object->t($helper_text);
                    }
                    $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                }
                $field[] = '</div>';
            } else {
                foreach ($langs as $lang) {
                    if (!is_array($property->value)) {
                        $ovalue = $property->value;
                        $property->value = array();
                        foreach ($langs as $lang_value) {
                            $property->value[$lang_value] = $ovalue;
                        }
                    }
                    $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>';
                    $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
                    $field[] = '<label>' . $property_name . ' ' . $language_info . '</label>';
                    $field[] = $naviforms->dropbox("property-" . $property->id . "-" . $lang, $property->value[$lang], "video", false, $property->dvalue, $website_id);
                    if (!empty($property->helper)) {
                        $helper_text = $property->helper;
                        if (!empty($object)) {
                            $helper_text = $object->t($helper_text);
                        }
                        $field[] = '<div class="subcomment">' . $helper_text . '</div>';
                    }
                    $field[] = '</div>';
                }
            }
            break;
        case 'file':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->dropbox("property-" . $property->id, $property->value, NULL, NULL, NULL, NULL, $website_id);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'comment':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $comment_text = $property->value;
            if (!empty($object)) {
                $comment_text = $object->t($property->value);
            }
            $field[] = '<div class="subcomment" style="clear: none;">' . $comment_text . '</div>';
            $field[] = '</div>';
            break;
        case 'category':
            $hierarchy = structure::hierarchy(0, $website_id);
            $categories_list = structure::hierarchyList($hierarchy, $property->value);
            if (empty($categories_list)) {
                $categories_list = '<ul><li value="0">' . t(428, '(no category)') . '</li></ul>';
            }
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->dropdown_tree("property-" . $property->id, $categories_list, $property->value);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'categories':
            $hierarchy = structure::hierarchy(0, $website_id);
            $selected = explode(',', $property->value);
            if (!is_array($selected)) {
                $selected = array($property->value);
            }
            $categories_list = structure::hierarchyList($hierarchy, $selected);
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = '<div class="category_tree" id="categories-tree-property-' . $property->id . '">
                            <img src="img/icons/silk/world.png" align="absmiddle" /> ' . $ws->name . '<div class="tree_ul">' . $categories_list . '</div>' . '</div>';
            $field[] = $naviforms->hidden('property-' . $property->id, $property->value);
            $field[] = '<label>&nbsp;</label>';
            $field[] = '<button id="categories_tree_select_all_categories-property-' . $property->id . '">' . t(481, 'Select all') . '</button>';
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            $layout->add_script('              
                $("#categories-tree-property-' . $property->id . ' .tree_ul").jstree({
                    plugins: ["changed", "types", "checkbox"],
                    "types" :
                    {
                        "default":  {   "icon": "img/icons/silk/folder.png"    },
                        "leaf":     {   "icon": "img/icons/silk/page_white.png"      }
                    },
                    "checkbox":
                    {
                        three_state: false,
                        cascade: "undetermined"
                    },
                    "core":
                    {
                        dblclick_toggle: false
                    }
                })
                .on("dblclick.jstree", function(e)
                {
                    e.preventDefault();
                    e.stopPropagation();
                
                    var li = $(e.target).closest("li");
                    $("#categories-tree-property-' . $property->id . ' .tree_ul").jstree("open_node", "#" + li[0].id);
                
                    var children_nodes = new Array();
                    children_nodes.push(li);
                    $(li).find("li").each(function() {
                        children_nodes.push("#" + $(this)[0].id);
                    });
                
                    $("#categories-tree-property-' . $property->id . ' .tree_ul").jstree("select_node", children_nodes);
                
                    return false;
                })
                .on("changed.jstree", function(e, data)
                {
                    var i, j, r = [];
                    var categories = new Array();
                    $("#property-' . $property->id . '").val("");       
                
                    for(i = 0, j = data.selected.length; i < j; i++)
                    {
                        var id = data.instance.get_node(data.selected[i]).data.nodeId;
                        categories.push(id);
                    }
                    
                    if(categories.length > 0)
                        $("#property-' . $property->id . '").val(categories);                                                                
                });

                $("#categories_tree_select_all_categories-property-' . $property->id . '").on("click", function(e)
                {
                    e.stopPropagation();
                    e.preventDefault();
                    $("#categories-tree-property-' . $property->id . ' .tree_ul").jstree("select_all");
                    return false;
                });                                
            ');
            break;
        case 'element':
        case 'item':
            $property_item_title = '';
            $property_item_id = '';
            if (!empty($property->value)) {
                $property_item_title = $DB->query_single('text', 'nv_webdictionary', '   node_type = "item" AND
                        website = "' . $ws->id . '" AND
                        node_id = "' . $property->value . '" AND
                        subtype = "title" AND
                        lang = "' . $ws->languages_published[0] . '"');
                $property_item_title = array($property_item_title);
                $property_item_id = array($property->value);
            }
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->selectfield("property-" . $property->id, $property_item_id, $property_item_title, $property->value, null, false, null, null, false);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            $template_filter = @$property->element_template;
            if (empty($template_filter)) {
                $template_filter = $property->item_template;
            }
            $layout->add_script('
                $("#property-' . $property->id . '").select2(
                {
                    placeholder: "' . t(533, "Find element by title") . '",
                    minimumInputLength: 1,
                    ajax: {
                        url: "' . NAVIGATE_URL . '/' . NAVIGATE_MAIN . '?fid=items&act=json_find_item",
                        dataType: "json",
                        delay: 100,
                        data: function(params)
                        {
	                        return {
				                title: params.term,
				                template: "' . $template_filter . '",
				                nd: new Date().getTime(),
				                page_limit: 30, // page size
				                page: params.page // page number
				            };
                        },
                        processResults: function (data, params)
				        {
				            params.page = params.page || 1;
				            return {
								results: data.items,
								pagination: { more: (params.page * 30) < data.total_count }
							};
				        }
                    },
                    templateSelection: function(row)
					{
						if(row.id)
							return row.text + " <helper style=\'opacity: .5;\'>#" + row.id + "</helper>";
						else
							return row.text;
					},
					escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
                    triggerChange: true,
                    allowClear: true
                });
            ');
            break;
        case 'elements':
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->textfield("property-" . $property->id);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            $template_filter = @$property->element_template;
            if (empty($template_filter)) {
                $template_filter = $property->item_template;
            }
            $layout->add_script('			                
                $("#property-' . $property->id . '").tagit({
                    removeConfirmation: true,
                    allowSpaces: true,
                    singleField: true,
                    singleFieldDelimiter: ",",
                    placeholderText: "+",
                    autocompleteOnly: true,
                    autocomplete: {
                        delay: 0, 
                        minLength: 1,
                        source: "' . NAVIGATE_URL . '/' . NAVIGATE_MAIN . '?fid=items&act=json_find_item&format=tagit&page_limit=10&template=' . $template_filter . '"
                    },
                    afterTagAdded: function(event, ui)
                    {                           
                        var tags = $(this).tagit("assignedValues");
                        if(tags.length > 0) tags = tags.join(",");
                        else                tags = "";
                            
                        $("#property-' . $property->id . '").val(tags).trigger("change");
                    },
                    afterTagRemoved: function(event, ui)
                    {
                        var tags = $(this).tagit("assignedValues");
                        if(tags.length > 0) tags = tags.join(",");
                        else                tags = "";

                        $("#property-' . $property->id . '").val(tags).trigger("change");
                    }
                });
                                
                $("#property-' . $property->id . '").next().sortable(
                {
                    items: ">li:not(.tagit-new)",
                    update: function(ui, event)
                    {
                        var tags = $("#property-' . $property->id . '").tagit("assignedValues");
                        if(tags.length > 0) tags = tags.join(",");
                        else                tags = "";

                        $("#property-' . $property->id . '").val(tags).trigger("change");
                    }
                });    
			');
            if (!empty($property->value)) {
                $values = explode(",", $property->value);
                $values = array_filter($values);
                foreach ($values as $cid) {
                    $content_title = $DB->query_single('text', 'nv_webdictionary', '   node_type = "item" AND
                        website = "' . $ws->id . '" AND
                        node_id = ' . protect($cid) . ' AND
                        subtype = "title" AND
                        lang = "' . $ws->languages_published[0] . '"');
                    $layout->add_script('
                        $("#property-' . $property->id . '").tagit("createTag", "' . $content_title . '", "", "", "' . $cid . '");                
                    ');
                }
                $layout->add_script('
                    $("#property-' . $property->id . '").trigger("change");
                ');
            }
            break;
        case 'webuser_groups':
            $webuser_groups = webuser_group::all_in_array();
            // to get the array of groups first we remove the "g" character
            $property->value = str_replace('g', '', $property->value);
            $property->value = explode(',', $property->value);
            $field[] = '<div class="navigate-form-row" nv_property="' . $property->id . '">';
            $field[] = '<label>' . $property_name . '</label>';
            $field[] = $naviforms->multiselect('property-' . $property->id, array_keys($webuser_groups), array_values($webuser_groups), $property->value);
            if (!empty($property->helper)) {
                $helper_text = $property->helper;
                if (!empty($object)) {
                    $helper_text = $object->t($helper_text);
                }
                $field[] = '<div class="subcomment">' . $helper_text . '</div>';
            }
            $field[] = '</div>';
            break;
        case 'product':
            // TO DO (when navigate has products!)
            break;
        default:
    }
    return implode("\n", $field);
}
Example #13
0
 private function loadAllData()
 {
     if (sizeof($this->full_access_data) < 1) {
         $query = database::getInstance()->con()->query("SELECT * FROM " . property::getInstance()->get('db_prefix') . "_user_access_level");
         $this->full_access_data = $query->fetchAll(\PDO::FETCH_ASSOC);
     }
 }
Example #14
0
<?php

/*
	[Destoon B2B System] Copyright (c) 2008-2015 www.destoon.com
	This is NOT a freeware, use is subject to license.txt
*/
defined('DT_ADMIN') or exit('Access Denied');
$CAT or msg('čÆ·ęŒ‡å®šåˆ†ē±»ID');
$menus = array(array('ę·»åŠ å±žę€§', '?file=' . $file . '&catid=' . $catid . '&action=add'), array('å±žę€§å‚ę•°', '?file=' . $file . '&catid=' . $catid), array('å¤åˆ¶å±žę€§', '?file=' . $file . '&catid=' . $catid . '&action=copy'));
$TYPE = array('å•č”Œę–‡ęœ¬(text)', 'å¤šč”Œę–‡ęœ¬(textarea)', '列č”Ø选ꋩ(select)', 'å¤é€‰ę”†(checkbox)');
$do = new property();
$do->catid = $catid;
switch ($action) {
    case 'add':
        if ($submit) {
            if ($do->pass($post)) {
                $do->add($post);
                dmsg('ę·»åŠ ęˆåŠŸ', '?file=' . $file . '&catid=' . $catid);
            } else {
                msg($do->errmsg);
            }
        } else {
            $type = 2;
            $required = $search = 0;
            $name = $value = $extend = '';
            include tpl('property_edit');
        }
        break;
    case 'edit':
        $oid or msg();
        $do->oid = $oid;
Example #15
0
 private function viewUpdate()
 {
     $params = array();
     if (!file_exists(root . "/install/.update-" . version)) {
         $params['notify']['unlock_update'] = true;
     }
     $install_log = @file_get_contents(root . "/install/.update-" . version);
     if ($install_log == "locked") {
         $params['notify']['locked_update'] = true;
     }
     if (!$this->isInstalled()) {
         $params['notify']['not_installed'] = true;
     } else {
         $stmt = database::getInstance()->con()->query("SELECT `version` FROM `" . property::getInstance()->get('db_prefix') . "_version` LIMIT 1");
         $res = $stmt->fetch(\PDO::FETCH_ASSOC);
         $usedVersion = $res['version'];
         if ($usedVersion == version) {
             $params['notify']['actual_version'] = true;
         }
         $updateQuery = null;
         if (sizeof($params['notify']) == 0) {
             if (system::getInstance()->post('startupdate')) {
                 $update_sql_array_files = $this->foundVersionUpdates($usedVersion, version);
                 if (is_array($update_sql_array_files)) {
                     foreach ($update_sql_array_files as $update_file) {
                         $updateQuery .= @file_get_contents(root . '/install/sql/' . $update_file) . '\\n';
                     }
                 }
                 if ($updateQuery != null) {
                     $updateQuery = str_replace('{$db_prefix}', property::getInstance()->get('db_prefix'), $updateQuery);
                     database::getInstance()->con()->exec($updateQuery);
                     @file_put_contents(root . "/install/.update-" . version, 'locked');
                     // only 1 run
                     $params['notify']['success'] = true;
                 } else {
                     $params['notify']['nosql_data'] = true;
                 }
             }
         }
     }
     return template::getInstance()->twigRender('update.tpl', $params);
 }
    public static function save_properties_from_array($object_type, $object_id, $template, $properties_assoc = array(), $ws = null, $node_uid = "")
    {
        global $DB;
        global $website;
        global $theme;
        if (empty($ws)) {
            $ws = $website;
        }
        $dictionary = array();
        $property_object_type = $object_type;
        // object_type: item, structure, block, block_group_block
        if ($object_type == 'block_group_block') {
            // we have to identify the block subtype: block, block_type, block_group_block or extension_block
            // so we can get its properties definition
            if (!is_numeric($object_id)) {
                // assume there can only be one block group of the same type
                $block_group_id = $DB->query_single('MAX(id)', 'nv_block_groups', ' code = ' . protect($template) . ' AND website = ' . $ws->id);
                $object_id = $block_group_id;
                if (empty($block_group_id)) {
                    $object_id = 0;
                }
            }
            if (!empty($node_uid)) {
                $bg = new block_group();
                $bg->load($object_id);
                for ($b = 0; $b < count($bg->blocks); $b++) {
                    if ($bg->blocks[$b]['uid'] == $node_uid) {
                        $block_id = $bg->blocks[$b]['id'];
                        if ($bg->blocks[$b]['type'] == 'extension') {
                            // an extension block
                            $property_object_type = 'block_group-extension-block';
                            // load the extension, if installed in this instance
                            $extension = new extension();
                            $extension->load($bg->blocks[$b]['extension']);
                            // find the property declaration in the extension definition
                            if (isset($extension->definition->blocks)) {
                                for ($eb = 0; $eb < count($extension->definition->blocks); $eb++) {
                                    if ($extension->definition->blocks[$eb]->id == $block_id) {
                                        $block = $extension->definition->blocks[$eb];
                                        break;
                                    }
                                }
                            } else {
                                // ignore this property, extension is not installed or it does not have the requested block definition
                                continue;
                            }
                        } else {
                            // a block group block
                            $property_object_type = 'block_group_block';
                            $block = block::block_group_block($template, $block_id);
                        }
                        // note: standard blocks don't "embed" their properties in a block group,
                        // they have their own separate values
                        break;
                    }
                }
            } else {
                // compatibility with < Navigate 2.1 themes (to be removed)
                $properties_names = array_keys($properties_assoc);
                $block = block::block_group_block_by_property($properties_names[0]);
            }
            if (!isset($block->properties) || empty($block->properties)) {
                return false;
            }
            $properties = $block->properties;
        } else {
            $properties = property::elements($template, $object_type);
        }
        if (!is_array($properties)) {
            $properties = array();
        }
        foreach ($properties as $property) {
            if (!isset($properties_assoc[$property->name]) && !isset($properties_assoc[$property->id])) {
                continue;
            }
            $values_dict = array();
            $value = '';
            // we try to find the property value by "property name", if empty then we try to find it via "property id"
            if (isset($properties_assoc[$property->name])) {
                $value = $properties_assoc[$property->name];
            }
            if (empty($value)) {
                $value = $properties_assoc[$property->id];
            }
            // multilanguage property?
            if (in_array($property->type, array('text', 'textarea', 'link', 'rich_textarea')) || @$property->multilanguage == 'true' || @$property->multilanguage === true) {
                if (isset($properties_assoc[$property->name])) {
                    $values_dict = $properties_assoc[$property->name];
                }
                if (empty($values_dict)) {
                    $values_dict = $properties_assoc[$property->id];
                }
                $value = '[dictionary]';
            }
            if ($property->type == 'coordinates') {
                if (is_array($value)) {
                    $value = $value['latitude'] . '#' . $value['longitude'];
                }
                // if it isn't an array, then we suppose it already has the right format
            }
            // property->type "decimal"; we don't need to reconvert, it should already be in the right format
            if ($property->type == 'webuser_groups' && !empty($value)) {
                $value = 'g' . implode(',g', $value);
            }
            // boolean (checkbox): if not checked,  form does not send the value
            if ($property->type == 'boolean' && empty($value)) {
                $value = 0;
            }
            if (is_null($value)) {
                $value = "";
            }
            // should not be needed because of value_or_default, but doing this here fixes some warnings
            // remove the old property value row
            $DB->execute('
				DELETE FROM nv_properties_items
                	  WHERE property_id = ' . protect($property->id) . '
                        AND element = ' . protect($property_object_type) . '
                        AND node_id = ' . protect($object_id) . (empty($node_uid) ? '' : ' AND node_uid = ' . protect($node_uid)) . '
                        AND website = ' . $ws->id);
            // now we insert a new row
            $DB->execute('
			    INSERT INTO nv_properties_items
				    (id, website, property_id, element, node_id, node_uid, name, value)
				VALUES
				    (   0,
						:website,
						:property_id,
						:type,
						:object_id,
						:node_uid,
						:name,
						:value
                    )', array(':website' => $ws->id, ':property_id' => $property->id, ':type' => $property_object_type, ':object_id' => value_or_default($object_id, 0), ':node_uid' => value_or_default($node_uid, ""), ':name' => $property->name, ':value' => value_or_default($value, "")));
            // $error = $DB->get_last_error();
            // set the dictionary for the multilanguage properties
            $default_language = '';
            if (isset($property->multilanguage) && ($property->multilanguage === 'false' || $property->multilanguage === false)) {
                $default_language = $ws->languages_list[0];
            }
            if (in_array($property->type, array('text', 'textarea', 'rich_textarea', 'link')) || @$property->multilanguage == 'true' || @$property->multilanguage === true) {
                foreach ($ws->languages_list as $lang) {
                    if (!empty($default_language)) {
                        // property is NOT multilanguage, use the first value for all languages
                        $dictionary[$lang]['property-' . $property->id . '-' . $lang] = $values_dict[$default_language];
                    } else {
                        $dictionary[$lang]['property-' . $property->id . '-' . $lang] = $values_dict[$lang];
                    }
                }
            }
        }
        if (!empty($dictionary)) {
            webdictionary::save_element_strings('property-' . $property_object_type, $object_id, $dictionary, $ws->id, $node_uid);
        }
        return true;
    }
Example #17
0
function webusers_form($item)
{
    global $user;
    global $DB;
    global $website;
    global $theme;
    global $layout;
    global $events;
    $navibars = new navibars();
    $naviforms = new naviforms();
    $layout->navigate_media_browser();
    // we can use media browser in this function
    if (empty($item->id)) {
        $navibars->title(t(24, 'Web users') . ' / ' . t(38, 'Create'));
    } else {
        $navibars->title(t(24, 'Web users') . ' / ' . t(170, 'Edit') . ' [' . $item->id . ']');
    }
    $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_media_browser();"><img height="16" align="absmiddle" width="16" src="img/icons/silk/images.png"> ' . t(36, 'Media') . '</a>'));
    $navibars->add_actions(array('<a href="?fid=' . $_REQUEST['fid'] . '&act=webuser_groups_list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/group.png"> ' . t(506, 'Groups') . '</a>'));
    if (!empty($item->id)) {
        $notes = grid_notes::comments('webuser', $item->id);
        $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_display_notes_dialog();"><span class="navigate_grid_notes_span" style=" width: 20px; line-height: 16px; ">' . count($notes) . '</span><img src="img/skins/badge.png" width="20px" height="18px" style="margin-top: -2px;" class="grid_note_edit" align="absmiddle" /> ' . t(168, 'Notes') . '</a>'));
    }
    if (empty($item->id)) {
        $navibars->add_actions(array('<a href="#" onclick="navigate_tabform_submit(1);"><img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . '</a>'));
    } else {
        $navibars->add_actions(array('<a href="#" onclick="navigate_tabform_submit(1);"><img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . '</a>', '<a href="#" onclick="navigate_delete_dialog();"><img height="16" align="absmiddle" width="16" src="img/icons/silk/cancel.png"> ' . t(35, 'Delete') . '</a>'));
        $delete_html = array();
        $delete_html[] = '<div id="navigate-delete-dialog" class="hidden">' . t(57, 'Do you really want to delete this item?') . '</div>';
        $delete_html[] = '<script language="javascript" type="text/javascript">';
        $delete_html[] = 'function navigate_delete_dialog()';
        $delete_html[] = '{';
        $delete_html[] = '$("#navigate-delete-dialog").removeClass("hidden");';
        $delete_html[] = '$("#navigate-delete-dialog").dialog({
							resizable: true,
							height: 150,
							width: 300,
							modal: true,
							title: "' . t(59, 'Confirmation') . '",
							buttons: {
								"' . t(35, 'Delete') . '": function() {
									$(this).dialog("close");
									window.location.href = "?fid=' . $_REQUEST['fid'] . '&act=remove&id=' . $item->id . '";
								},
								"' . t(58, 'Cancel') . '": function() {
									$(this).dialog("close");
								}
							}
						});';
        $delete_html[] = '}';
        $delete_html[] = '</script>';
        $navibars->add_content(implode("\n", $delete_html));
    }
    $navibars->add_actions(array(!empty($item->id) ? '<a href="?fid=webusers&act=2"><img height="16" align="absmiddle" width="16" src="img/icons/silk/add.png"> ' . t(38, 'Create') . '</a>' : '', '<a href="?fid=webusers&act=0"><img height="16" align="absmiddle" width="16" src="img/icons/silk/application_view_list.png"> ' . t(39, 'List') . '</a>', 'search_form'));
    $navibars->form();
    $navibars->add_tab(t(43, "Main"));
    $navibars->add_tab_content($naviforms->hidden('form-sent', 'true'));
    $navibars->add_tab_content($naviforms->hidden('id', $item->id));
    $navibars->add_tab_content_row(array('<label>ID</label>', '<span>' . (!empty($item->id) ? $item->id : t(52, '(new)')) . '</span>'));
    $navibars->add_tab_content_row(array('<label>' . t(246, 'Avatar') . '</label>', $naviforms->dropbox('webuser-avatar', $item->avatar, "image")));
    $navibars->add_tab_content_row(array('<label>' . t(1, 'User') . '</label>', $naviforms->textfield('webuser-username', $item->username, false, false, 'autocomplete="off"')));
    $navibars->add_tab_content_row(array('<label>' . t(2, 'Password') . '</label>', '<input type="password" name="webuser-password" autocomplete="off" value="" size="32" />', '<span class="navigate-form-row-info">' . t(48, "Leave blank to keep the current value") . '</span>'));
    // force removing the browser saved password
    $layout->add_script('
		setTimeout(function() {
			$("input[name=webuser-password]").val("");
		}, 10);
	');
    $navibars->add_tab_content_row(array('<label>' . t(44, 'E-Mail') . '</label>', $naviforms->textfield('webuser-email', $item->email), $item->email_verification_date > 0 ? '<span class="navigate-form-row-info" title="' . core_ts2date($item->email_verification_date, true) . '"><img src="img/icons/silk/tick.png" align="absmiddle" /> ' . t(37, "E-Mail confirmed") . '</span>' : ''));
    if (!empty($item->joindate)) {
        $navibars->add_tab_content_row(array('<label>' . t(247, 'Date joined') . '</label>', core_ts2date($item->joindate, true)));
    }
    if (!empty($item->lastseen)) {
        $navibars->add_tab_content_row(array('<label>' . t(563, 'Last seen') . '</label>', core_ts2date($item->lastseen, true)));
    }
    $navibars->add_tab_content_row(array('<label>' . t(249, 'Newsletter') . '</label>', $naviforms->checkbox('webuser-newsletter', $item->newsletter)));
    $webuser_access = array('0' => t(321, "Allowed"), '1' => t(47, "Blocked"), '2' => t(622, "Date range"));
    $navibars->add_tab_content_row(array('<label>' . t(364, 'Access') . '</label>', $naviforms->selectfield('webuser-access', array_keys($webuser_access), array_values($webuser_access), $item->access, 'navigate_webusers_change_access();')));
    if (empty($item->access_begin)) {
        $item->access_begin = '';
    }
    $navibars->add_tab_content_row(array('<label>&nbsp;&nbsp;<img src="img/icons/silk/date_go.png" /> ' . t(623, 'Begin') . '</label>', $naviforms->datefield('webuser-access-begin', $item->access_begin, true, ' width:200px; ')));
    if (empty($item->access_end)) {
        $item->access_end = '';
    }
    $navibars->add_tab_content_row(array('<label>&nbsp;&nbsp;<img src="img/icons/silk/date_delete.png" /> ' . t(624, 'End') . '</label>', $naviforms->datefield('webuser-access-end', $item->access_end, true, ' width:200px; ')));
    $layout->add_script('
		function navigate_webusers_change_access()
		{
			$("#webuser-access-begin").parent().hide();
			$("#webuser-access-end").parent().hide();
			
			if($("#webuser-access").val() == "2")
			{
				$("#webuser-access-begin").parent().show();
				$("#webuser-access-end").parent().show();
			}
		}
		navigate_webusers_change_access();
	');
    // private_comment is deprecated in NV 2.0
    if (!empty($item->private_comment)) {
        $navibars->add_tab_content_row(array('<label>' . t(538, 'Private comment') . '</label>', $naviforms->textarea('webuser-private_comment', $item->private_comment)));
    }
    $navibars->add_tab(t(506, "Groups"));
    $webuser_groups = webuser_group::all_in_array();
    $navibars->add_tab_content_row(array('<label>' . t(506, "Groups") . '</label>', $naviforms->multiselect('webuser-groups', array_keys($webuser_groups), array_values($webuser_groups), $item->groups)));
    $navibars->add_tab(t(308, "Personal"));
    $navibars->add_tab_content_row(array('<label>' . t(159, 'Name') . '</label>', $naviforms->textfield('webuser-fullname', $item->fullname)));
    $navibars->add_tab_content_row(array('<label>' . t(160, 'Type') . ' / ' . t(304, 'Gender') . '</label>', $naviforms->buttonset('webuser-gender', array('male' => '<img src="img/icons/silk/male.png" align="absbottom" /> ' . t(305, 'Male'), 'female' => '<img src="img/icons/silk/female.png" align="absbottom" /> ' . t(306, 'Female'), 'company' => '<img src="img/icons/silk/building.png" align="absbottom" /> ' . t(592, 'Company'), '' => '<img src="img/icons/silk/help.png" align="absbottom" /> ' . t(307, 'Unspecified')), $item->gender)));
    $navibars->add_tab_content_row(array('<label>' . t(248, 'Birthdate') . '</label>', $naviforms->datefield('webuser-birthdate', $item->birthdate, false)));
    $countries = property::countries();
    $country_names = array_values($countries);
    $country_codes = array_keys($countries);
    // include "country not defined" item
    array_unshift($country_codes, '');
    array_unshift($country_names, '(' . t(307, "Unspecified") . ')');
    $navibars->add_tab_content_row(array('<label>' . t(224, 'Country') . '</label>', $naviforms->selectfield("webuser-country", $country_codes, $country_names, strtoupper($item->country))));
    $timezones = property::timezones();
    if (empty($item->timezone)) {
        $item->timezone = date_default_timezone_get();
    }
    $navibars->add_tab_content_row(array('<label>' . t(97, 'Timezone') . '</label>', $naviforms->selectfield("webuser-timezone", array_keys($timezones), array_values($timezones), $item->timezone)));
    $layout->add_script('
		var webuser_country = "' . $item->country . '";
		$("#webuser-country").bind("change blur", function()
		{
			if($(this).val() != webuser_country)
			{
				webuser_country = $(this).val();
				$.getJSON("?fid=' . $_REQUEST['fid'] . '", { country: $(this).val(), act: 90 }, function(data) 
				{
					$("#webuser-timezone").find("option").remove();
					
					$.each(data, function(value, text) 
					{
						$("<option />", {
							value: value,
							html: text
						}).appendTo("#webuser-timezone");
					});				
				});				
			}
		});
	');
    // Language selector
    $data = language::language_names(false);
    $select = $naviforms->selectfield('webuser-language', array_keys($data), array_values($data), $item->language);
    $navibars->add_tab_content_row(array('<label>' . t(46, 'Language') . '</label>', $select));
    $navibars->add_tab(t(233, "Address"));
    $navibars->add_tab_content_row(array('<label>' . t(233, 'Address') . '</label>', $naviforms->textfield('webuser-address', $item->address)));
    $navibars->add_tab_content_row(array('<label>' . t(319, 'Location') . '</label>', $naviforms->textfield('webuser-location', $item->location)));
    $navibars->add_tab_content_row(array('<label>' . t(318, 'Zip code') . '</label>', $naviforms->textfield('webuser-zipcode', $item->zipcode)));
    $navibars->add_tab_content_row(array('<label>' . t(320, 'Phone') . '</label>', $naviforms->textfield('webuser-phone', $item->phone)));
    $navibars->add_tab(t(309, "Social"));
    $navibars->add_tab_content_row(array('<label>' . t(177, 'Website') . '</label>', $naviforms->textfield('webuser-social_website', $item->social_website)));
    if (!empty($theme->webusers['properties'])) {
        $properties_html = navigate_property_layout_form('webuser', $theme->name, 'webuser', $item->id);
        if (!empty($properties_html)) {
            $navibars->add_tab(t(77, "Properties"));
            $navibars->add_tab_content($properties_html);
        }
    }
    if (!empty($item->id)) {
        $layout->navigate_notes_dialog('webuser', $item->id);
    }
    $events->trigger('webuser', 'edit', array('webuser' => &$item, 'navibars' => &$navibars, 'naviforms' => &$naviforms));
    return $navibars->generate();
}
Example #18
0
 public function property_definition($property_name)
 {
     global $DB;
     // load properties if not already done
     if (empty($this->properties)) {
         // check if this is an embedded item or it is a free element
         if ($this->embedding == 1 && $this->association == 'category') {
             // properties are given in structure definition
             $structure_template = @$DB->query_single('template', 'nv_structure', 'id = ' . intval($this->category));
             $this->properties = property::load_properties('structure', $structure_template, 'item', $this->id);
         } else {
             $this->properties = property::load_properties('item', $this->template, 'item', $this->id);
         }
     }
     for ($p = 0; $p < count($this->properties); $p++) {
         if ($this->properties[$p]->name == $property_name || $this->properties[$p]->id == $property_name) {
             $out = $this->properties[$p];
             break;
         }
     }
     return $out;
 }
Example #19
0
 public static function generate_feed($id = NULL)
 {
     global $current;
     global $website;
     global $DB;
     if (empty($id)) {
         $id = $current['id'];
     }
     $item = new feed();
     $item->load($id);
     $permission = nvweb_object_enabled($item);
     if (!$permission) {
         return;
     }
     $feed = new UniversalFeedCreator();
     $feed->encoding = 'UTF-8';
     $feed->title = $item->dictionary[$current['lang']]['title'];
     $feed->description = $item->dictionary[$current['lang']]['description'];
     $feed->link = $website->absolute_path();
     $feed->syndicationURL = $website->absolute_path() . $item->paths[$current['lang']];
     if (!empty($item->image)) {
         $image = new FeedImage();
         $image->url = $website->absolute_path() . '/object?type=image&amp;id=' . $item->image;
         $image->link = $website->absolute_path();
         //$image->description = $vars['dictionary_description'];
         $feed->image = $image;
     }
     if (!empty($item->categories[0])) {
         $limit = intval($item->entries);
         if ($limit <= 0) {
             $limit = 10;
         }
         $DB->query(' SELECT SQL_CALC_FOUND_ROWS i.id, i.permission, i.date_published, i.date_unpublish,
                             i.date_to_display, COALESCE(NULLIF(i.date_to_display, 0), i.date_created) as pdate, d.text as title, i.position as position,
                             i.galleries as galleries, i.template as template
                       FROM nv_items i, nv_structure s, nv_webdictionary d
                      WHERE i.category IN(' . implode(",", $item->categories) . ')
                        AND i.website = ' . $website->id . '
                        AND i.permission = 0
                        AND (i.date_published = 0 OR i.date_published < ' . core_time() . ')
                        AND (i.date_unpublish = 0 OR i.date_unpublish > ' . core_time() . ')
                        AND s.id = i.category
                        AND (s.date_published = 0 OR s.date_published < ' . core_time() . ')
                        AND (s.date_unpublish = 0 OR s.date_unpublish > ' . core_time() . ')
                        AND s.permission = 0
                        AND (s.access = 0)
                        AND (i.access = 0)
                        AND d.website = i.website
                        AND d.node_type = "item"
                        AND d.subtype = "title"
                        AND d.node_id = i.id
                        AND d.lang = ' . protect($current['lang']) . '
                      ORDER BY pdate DESC
                      LIMIT ' . $limit . '
                     OFFSET 0');
         $rs = $DB->result();
         for ($x = 0; $x < count($rs); $x++) {
             if (nvweb_object_enabled($rs[$x])) {
                 $texts = webdictionary::load_element_strings('item', $rs[$x]->id);
                 $paths = path::loadElementPaths('item', $rs[$x]->id);
                 $fitem = new FeedItem();
                 $fitem->title = $texts[$current['lang']]['title'];
                 $fitem->link = $website->absolute_path() . $paths[$current['lang']];
                 switch ($item->content) {
                     case 'title':
                         // no description
                         break;
                     case 'content':
                         $fitem->description = $texts[$current['lang']]['section-main'];
                         break;
                     case 'summary':
                     default:
                         $fitem->description = $texts[$current['lang']]['section-main'];
                         $fitem->description = str_replace(array('</p>', '<br />', '<br/>', '<br>'), array('</p>' . "\n", '<br />' . "\n", '<br/>' . "\n", '<br>' . "\n"), $fitem->description);
                         $fitem->description = core_string_cut($fitem->description, 500, '&hellip;');
                         break;
                 }
                 $fitem->date = $rs[$x]->date_to_display;
                 // find an image to attach to the item
                 // A) first enabled image in item gallery
                 // B) first image on properties
                 $image = '';
                 if (!empty($rs[$x]->galleries)) {
                     $galleries = mb_unserialize($rs[$x]->galleries);
                     $photo = @array_shift(array_keys($galleries[0]));
                     if (!empty($photo)) {
                         $image = $website->absolute_path(false) . '/object?type=image&id=' . $photo;
                     }
                 }
                 if (empty($image)) {
                     // no image found on galleries, look for image properties
                     $properties = property::load_properties("item", $rs[$x]->template, "item", $rs[$x]->id);
                     for ($p = 0; $p < count($properties); $p++) {
                         if ($properties[$p]->type == 'image') {
                             if (!empty($properties[$p]->value)) {
                                 $image = $properties[$p]->value;
                             } else {
                                 if (!empty($properties[$p]->dvalue)) {
                                     $image = $properties[$p]->dvalue;
                                 }
                             }
                             if (is_array($image)) {
                                 $image = array_values($image);
                                 $image = $image[0];
                             }
                             if (!empty($image)) {
                                 $image = $website->absolute_path(false) . '/object?type=image&id=' . $image;
                             }
                         }
                         // we only need the first image
                         if (!empty($image)) {
                             break;
                         }
                     }
                 }
                 if (!empty($image)) {
                     $fitem->image = $image;
                     // feedly will only display images of >450px --> http://blog.feedly.com/2015/07/31/10-ways-to-optimize-your-feed-for-feedly/
                     if (strpos($item->format, 'RSS') !== false) {
                         $fitem->description = '<img src="' . $image . '&width=640"><br />' . $fitem->description;
                     }
                 }
                 //$item->author = $contents->rows[$x]->author_name;
                 $feed->addItem($fitem);
             }
         }
         // valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1 (deprecated),
         // MBOX, OPML, ATOM, ATOM10, ATOM0.3, HTML, JS
         //echo $rss->saveFeed("RSS1.0", "news/feed.xml");
     }
     $xml = $feed->createFeed($item->format);
     if ($item->format == "RSS2.0") {
         // add extra tweaks to improve the feed
         $xml = str_replace('<rss ', '<rss xmlns:webfeeds="http://webfeeds.org/rss/1.0" ', $xml);
         // also available:
         // <webfeeds:cover image="http://yoursite.com/a-large-cover-image.png" />\n
         // <webfeeds:accentColor>00FF00</webfeeds:accentColor>
         $xml = str_replace('<channel>', '<channel>' . "\n\t\t" . '<webfeeds:related layout="card" target="browser" />', $xml);
         $xml = str_replace('<channel>', '<channel>' . "\n\t\t" . '<webfeeds:logo>' . file::file_url($item->image) . '</webfeeds:logo>', $xml);
         $xml = str_replace('<channel>', '<channel>' . "\n\t\t" . '<webfeeds:icon>' . file::file_url($website->favicon) . '</webfeeds:icon>', $xml);
     }
     return $xml;
 }
Example #20
0
function run()
{
    global $layout;
    global $DB;
    global $website;
    global $theme;
    global $user;
    $out = '';
    $item = new item();
    switch ($_REQUEST['act']) {
        case 'json':
        case 1:
            // json data retrieval & operations
            switch ($_REQUEST['oper']) {
                case 'del':
                    // remove rows
                    $ids = $_REQUEST['ids'];
                    foreach ($ids as $id) {
                        $item->load($id);
                        $item->delete();
                    }
                    echo json_encode(true);
                    break;
                default:
                    // list or search
                    // translation of request search & order fields
                    switch ($_REQUEST['searchField']) {
                        case 'id':
                            $_REQUEST['searchField'] = 'i.id';
                            break;
                        case 'title':
                            $_REQUEST['searchField'] = 'd.text';
                            break;
                        case 'language':
                            $_REQUEST['searchField'] = 'd.lang';
                            break;
                        case 'category':
                            $_REQUEST['searchField'] = 'i.category';
                            break;
                        case 'dates':
                            $_REQUEST['searchField'] = 'i.date_published';
                            break;
                        case 'permission':
                            $_REQUEST['searchField'] = 'i.permission';
                            break;
                        default:
                    }
                    if ($_REQUEST['sidx'] == 'dates') {
                        $_REQUEST['sidx'] = 'i.date_published';
                    }
                    $page = intval($_REQUEST['page']);
                    $max = intval($_REQUEST['rows']);
                    $offset = ($page - 1) * $max;
                    $orderby = $_REQUEST['sidx'] . ' ' . $_REQUEST['sord'];
                    $where = ' i.website = ' . $website->id;
                    if ($_REQUEST['_search'] == 'true' || isset($_REQUEST['quicksearch'])) {
                        if (isset($_REQUEST['quicksearch'])) {
                            $where .= $item->quicksearch($_REQUEST['quicksearch']);
                        } else {
                            if (isset($_REQUEST['filters'])) {
                                if (is_array($_REQUEST['filters'])) {
                                    $filters = json_decode(json_encode($_REQUEST['filters']), FALSE);
                                } else {
                                    $filters = json_decode($_REQUEST['filters']);
                                }
                                for ($r = 0; $r < count($filters->rules); $r++) {
                                    switch ($filters->rules[$r]->field) {
                                        case 'id':
                                            $filters->rules[$r]->field = 'i.id';
                                            break;
                                        case 'title':
                                            $filters->rules[$r]->field = 'd.text';
                                            break;
                                        case 'language':
                                            $filters->rules[$r]->field = 'd.lang';
                                            break;
                                        case 'category':
                                            $filters->rules[$r]->field = 'i.category';
                                            break;
                                        case 'dates':
                                            $filters->rules[$r]->field = 'i.date_published';
                                            break;
                                        case 'permission':
                                            $filters->rules[$r]->field = 'i.permission';
                                            break;
                                        default:
                                    }
                                }
                                $where .= navitable::jqgridsearch(json_encode($filters));
                            } else {
                                // single search
                                $where .= ' AND ' . navitable::jqgridcompare($_REQUEST['searchField'], $_REQUEST['searchOper'], $_REQUEST['searchString']);
                            }
                        }
                    }
                    $sql = ' SELECT SQL_CALC_FOUND_ROWS
					                i.*, d.text as title, d.lang as language,
                                    u.username as author_username,
                                    (   SELECT COUNT(*)
                                        FROM nv_comments cm
                                        WHERE cm.item = i.id
                                          AND cm.website = ' . $website->id . '
                                    ) as comments
							   FROM nv_items i
						  LEFT JOIN nv_webdictionary d
						  		 	 ON i.id = d.node_id
								 	AND d.node_type = "item"
									AND d.subtype = "title"
									AND d.lang = "' . $website->languages_list[0] . '"
									AND d.website = ' . $website->id . '
						  LEFT JOIN nv_users u
						  			 ON u.id = i.author
							  WHERE ' . $where . '	
						   GROUP BY i.id, d.text, d.lang, u.username						   
						   ORDER BY ' . $orderby . ' 
							  LIMIT ' . $max . '
							 OFFSET ' . $offset;
                    if (!$DB->query($sql, 'array')) {
                        throw new Exception($DB->get_last_error());
                    }
                    $dataset = $DB->result();
                    $total = $DB->foundRows();
                    $dataset = grid_notes::summary($dataset, 'item', 'id');
                    $access = array(0 => '<img src="img/icons/silk/page_white_go.png" align="absmiddle" title="' . t(254, 'Everybody') . '" />', 1 => '<img src="img/icons/silk/lock.png" align="absmiddle" title="' . t(361, 'Web users only') . '" />', 2 => '<img src="img/icons/silk/user_gray.png" align="absmiddle" title="' . t(363, 'Users who have not yet signed up or signed in') . '" />', 3 => '<img src="img/icons/silk/group_key.png" align="absmiddle" title="' . t(512, "Selected web user groups") . '" />');
                    $permissions = array(0 => '<img src="img/icons/silk/world.png" align="absmiddle" /> ' . t(69, 'Published'), 1 => '<img src="img/icons/silk/world_dawn.png" align="absmiddle" /> ' . t(70, 'Private'), 2 => '<img src="img/icons/silk/world_night.png" align="absmiddle" /> ' . t(81, 'Hidden'));
                    $hierarchy = structure::hierarchy(0);
                    // we need to format the values and retrieve the needed strings from the dictionary
                    $out = array();
                    for ($i = 0; $i < count($dataset); $i++) {
                        if (empty($dataset[$i])) {
                            continue;
                        }
                        if (empty($dataset[$i]['date_published'])) {
                            $dataset[$i]['date_published'] = '&infin;';
                        } else {
                            $dataset[$i]['date_published'] = core_ts2date($dataset[$i]['date_published'], false);
                        }
                        if (empty($dataset[$i]['date_unpublish'])) {
                            $dataset[$i]['date_unpublish'] = '&infin;';
                        } else {
                            $dataset[$i]['date_unpublish'] = core_ts2date($dataset[$i]['date_unpublish'], false);
                        }
                        if (empty($dataset[$i]['date_to_display'])) {
                            $dataset[$i]['date_to_display'] = '';
                        } else {
                            $dataset[$i]['date_to_display'] = core_ts2date($dataset[$i]['date_to_display'], false);
                        }
                        if ($dataset[$i]['category'] > 0) {
                            $category_path = structure::hierarchyPath($hierarchy, $dataset[$i]['category']);
                            if (is_array($category_path)) {
                                $dataset[$i]['category_path'] = implode(' ā€ŗ ', $category_path);
                            } else {
                                $dataset[$i]['category_path'] = $category_path;
                            }
                        }
                        $category_text = '';
                        if ($dataset[$i]['association'] == 'free') {
                            $category_text = '[ ' . strtolower(t(100, 'Free')) . ' ]';
                        } else {
                            $category_text = $dataset[$i]['category_path'];
                        }
                        $item_views = $dataset[$i]['views'];
                        if ($item_views > 1000) {
                            $item_views = round($item_views / 1000) . "K";
                        }
                        $item_comments = $dataset[$i]['comments'];
                        if ($item_comments > 1000) {
                            $item_comments = round($item_comments / 1000) . "K";
                        }
                        //$social_rating = '<img src="img/icons/silk/star.png" align="absmiddle" width="12px" height="12px" /> '.
                        //    '<span style="font-size: 90%;">'.$dataset[$i]['score'].' ('.$dataset[$i]['votes'].')</span>';
                        //$social_rating = '<i class="fa fa-fw fa-eye" /> <span style="font-size: 90%;">'.$dataset[$i]['views'].'</span>';
                        $social_rating = '<img src="img/icons/silk/eye.png" align="absmiddle" width="12px" height="12px" /> ' . '<span style="font-size: 90%;">' . $item_views . '</span>';
                        //$social_comments = '<i class="fa fa-fw fa-comments-o" /> <span style="font-size: 90%;">'.$dataset[$i]['comments'].'</span>';
                        $social_comments = '<img src="img/icons/silk/comments.png" align="absmiddle" width="12px" height="12px" /> ' . '<span style="font-size: 90%;">' . $item_comments . '</span>';
                        if (empty($dataset[$i]['title'])) {
                            // if title is empty for the default language,
                            // try to load the title in another language
                            $DB->query('
                                SELECT lang, text
                                  FROM nv_webdictionary
                                 WHERE website = ' . $website->id . ' AND
                                        node_type = "item" AND
                                        subtype="title" AND
                                        node_id = ' . $dataset[$i]['id'] . ' AND
                                        text != ""
                                ORDER BY id ASC');
                            $titles = $DB->result();
                            if (!empty($titles)) {
                                $dataset[$i]['title'] = '<img src="img/icons/silk/comment.png" align="absmiddle" />';
                                $dataset[$i]['title'] .= '<small>' . $titles[0]->lang . '</small>&nbsp;&nbsp;';
                                $dataset[$i]['title'] .= $titles[0]->text;
                            }
                        }
                        $out[$i] = array(0 => $dataset[$i]['id'], 1 => '<div class="list-row" data-permission="' . $dataset[$i]['permission'] . '">' . $dataset[$i]['title'] . '</div>', 2 => $social_rating . '&nbsp;&nbsp;' . $social_comments, 3 => $category_text, 4 => $dataset[$i]['date_to_display'], 5 => $dataset[$i]['date_published'] . ' - ' . $dataset[$i]['date_unpublish'], 6 => $access[$dataset[$i]['access']] . ' ' . $permissions[$dataset[$i]['permission']], 7 => $dataset[$i]['_grid_notes_html']);
                    }
                    navitable::jqgridJson($out, $page, $offset, $max, $total);
                    break;
            }
            core_terminate();
            break;
        case 'load':
        case 'create':
        case 'edit':
        case 2:
            // edit/new form
            if (!empty($_REQUEST['id'])) {
                $item->load(intval($_REQUEST['id']));
                if ($user->permission("items.edit") == "false" && $item->author != $user->id) {
                    $layout->navigate_notification(t(610, "Sorry, you are not allowed to execute the requested function"), true);
                    $_REQUEST['act'] = 'list';
                    return run();
                }
                // check if the current user can edit this item
                if ($item->association == 'category' && !empty($item->category)) {
                    if (!structure::category_allowed($item->category)) {
                        $layout->navigate_notification(t(610, "Sorry, you are not allowed to execute the requested function"), true);
                        $_REQUEST['act'] = 'list';
                        return run();
                    }
                }
            }
            if (isset($_REQUEST['form-sent'])) {
                $item->load_from_post();
                try {
                    $item->save();
                    property::save_properties_from_post('item', $item->id);
                    if (!empty($_REQUEST['items-order'])) {
                        item::reorder($_REQUEST['items-order']);
                    }
                    $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check');
                    $item->load($item->id);
                    users_log::action($_REQUEST['fid'], $item->id, 'save', $item->dictionary[$website->languages_list[0]]['title'], json_encode($_REQUEST));
                } catch (Exception $e) {
                    $layout->navigate_notification($e->getMessage(), true, true);
                }
            } else {
                users_log::action($_REQUEST['fid'], $item->id, 'load', $item->dictionary[$website->languages_list[0]]['title']);
            }
            $out = items_form($item);
            break;
        case 'delete':
        case 4:
            // remove
            if (!empty($_REQUEST['id'])) {
                $item->load(intval($_REQUEST['id']));
                try {
                    if (!empty($item->id)) {
                        $deleted = $item->delete() > 0;
                        if ($deleted) {
                            $layout->navigate_notification(t(55, 'Item removed successfully.'), false);
                            $out = items_list();
                            users_log::action($_REQUEST['fid'], $item->id, 'remove', $item->dictionary[$website->languages_list[0]]['title'], json_encode($_REQUEST));
                        }
                    }
                    if (!$deleted) {
                        $layout->navigate_notification(t(56, 'Unexpected error.'), false);
                        if (!empty($item->id)) {
                            $out = items_form($item);
                        } else {
                            $out = items_list();
                        }
                    }
                } catch (Exception $e) {
                    $layout->navigate_notification($e->getMessage(), true);
                    if (!empty($item->id)) {
                        $out = items_form($item);
                    }
                }
            }
            break;
        case 'duplicate':
            if (!empty($_REQUEST['id'])) {
                $item->load(intval($_REQUEST['id']));
                if ($item->association == 'category' && $item->embedding == 1) {
                    // get structure template
                    $category = new structure();
                    $category->load($item->category);
                    $properties = property::load_properties_associative('structure', $category->template, 'item', $item->id);
                } else {
                    $properties = property::load_properties_associative('item', $item->template, 'item', $item->id);
                }
                // try to duplicate
                $item->id = 0;
                $ok = $item->insert();
                if ($ok) {
                    // duplicate item properties too (but don't duplicate comments)
                    if ($item->association == 'category' && $item->embedding == 1) {
                        $ok = property::save_properties_from_array('item', $item->id, $category->template, $properties);
                    } else {
                        $ok = property::save_properties_from_array('item', $item->id, $item->template, $properties);
                    }
                }
                if ($ok) {
                    $layout->navigate_notification(t(478, 'Item duplicated successfully.'), false, false, 'fa fa-check');
                    $out = items_form($item);
                } else {
                    $layout->navigate_notification(t(56, 'Unexpected error.'), false);
                    $item = new item();
                    $item->load(intval($_REQUEST['id']));
                    $out = items_form($item);
                }
                users_log::action($_REQUEST['fid'], $item->id, 'duplicate', $item->dictionary[$website->languages_list[0]]['title'], json_encode($_REQUEST));
            }
            break;
        case 89:
            if (!empty($_REQUEST['id'])) {
                $DB->execute('DELETE FROM nv_webdictionary_history WHERE id = ' . intval($_REQUEST['id']) . ' LIMIT 1');
                echo 'true';
            } else {
                echo 'false';
            }
            core_terminate();
            break;
        case 90:
            $DB->query('SELECT id, date_created, autosave
						  FROM nv_webdictionary_history
						 WHERE node_type = "item"
						   AND subtype = ' . protect('section-' . $_REQUEST['section']) . '
						   AND lang = ' . protect($_GET['lang']) . '
						   AND node_id = ' . protect($_REQUEST['id']) . '
						   AND website = ' . $website->id . ' 
				      ORDER BY date_created DESC', 'array');
            $result = $DB->result();
            if (!is_array($result)) {
                $result = array();
            }
            for ($i = 0; $i < count($result); $i++) {
                $result[$i]['date'] = core_ts2date($result[$i]['date_created'], true);
                if ($result[$i]['autosave'] == 1) {
                    $result[$i]['date'] .= ' (' . t(273, 'Autosave') . ')';
                }
            }
            echo json_encode($result);
            core_terminate();
            break;
        case "search_by_title":
        case 91:
            // json search title request (for "copy from" dialog)
            $DB->query('
				SELECT node_id as id, text as label, text as value
				  FROM nv_webdictionary
				 WHERE node_type = "item"
				   AND subtype = "title"
				   AND lang = ' . protect($_REQUEST['lang']) . '
				   AND website = ' . $website->id . '
				   AND text LIKE ' . protect('%' . $_REQUEST['title'] . '%') . '
		      ORDER BY text ASC
			     LIMIT 20', 'array');
            echo json_encode($DB->result());
            core_terminate();
            break;
        case "raw_zone_content":
            // return raw item contents
            if (empty($_REQUEST['section'])) {
                $_REQUEST['section'] = 'main';
            }
            if ($_REQUEST['history'] == 'true') {
                $DB->query('SELECT text
							  FROM nv_webdictionary_history
							 WHERE node_type = "item"
							   AND website = ' . $website->id . ' 
							   AND id = ' . protect($_REQUEST['id']), 'array');
                $data = $DB->first();
                echo $data['text'];
            } else {
                if ($_REQUEST['zone'] == 'section') {
                    $DB->query('SELECT text
							  FROM nv_webdictionary
							 WHERE node_type = "item"
							   AND subtype = ' . protect('section-' . $_REQUEST['section']) . '
							   AND lang = ' . protect($_REQUEST['lang']) . '
							   AND website = ' . $website->id . ' 
							   AND node_id = ' . protect($_REQUEST['node_id']), 'array');
                    $data = $DB->first();
                    echo $data['text'];
                } else {
                    if ($_REQUEST['zone'] == 'property') {
                        $DB->query('SELECT text
							  FROM nv_webdictionary
							 WHERE node_type = "property-item"
							   AND subtype = ' . protect('property-' . $_REQUEST['section'] . '-' . $_REQUEST['lang']) . '
							   AND lang = ' . protect($_REQUEST['lang']) . '
							   AND website = ' . $website->id . '
							   AND node_id = ' . protect($_REQUEST['node_id']), 'array');
                        $data = $DB->first();
                        echo $data['text'];
                    }
                }
            }
            core_terminate();
            break;
            // return raw template content
        // return raw template content
        case 93:
            $DB->query('SELECT file
						  FROM nv_templates
						 WHERE enabled = 1
						   AND id = ' . protect($_REQUEST['id']) . '
						   AND website = ' . $website->id, 'array');
            $data = $DB->first();
            echo @file_get_contents(NAVIGATE_PRIVATE . '/' . $website->id . '/templates/' . $data['file']);
            core_terminate();
            break;
        case "copy_from_template_zones":
            // return template sections and (textarea) properties for a content id
            $item = new item();
            $item->load(intval($_REQUEST['id']));
            $template = $item->load_template();
            $zones = array();
            for ($ts = 0; $ts < count($template->sections); $ts++) {
                $title = $template->sections[$ts]['name'];
                if (!empty($theme)) {
                    $title = $theme->t($title);
                }
                if ($title == '#main#') {
                    $title = t(238, 'Main content');
                }
                $zones[] = array('type' => 'section', 'id' => $template->sections[$ts]['id'], 'title' => $title);
            }
            for ($ps = 0; $ps < count($template->properties); $ps++) {
                // ignore structure properties
                if (isset($template->properties[$ps]->element) && $template->properties[$ps]->element != 'item') {
                    continue;
                }
                // ignore non-textual properties
                if (!in_array($template->properties[$ps]->type, array("text", "textarea", "rich_textarea"))) {
                    continue;
                }
                $title = $template->properties[$ps]->name;
                if (!empty($theme)) {
                    $title = $theme->t($title);
                }
                $zones[] = array('type' => 'property', 'id' => $template->properties[$ps]->id, 'title' => $title);
            }
            echo json_encode($zones);
            core_terminate();
            break;
        case 95:
            // free path checking
            $path = $_REQUEST['path'];
            $id = $_REQUEST['id'];
            $DB->query('SELECT type, object_id, lang
	 					  FROM nv_paths
						 WHERE path = ' . protect($path) . '
						   AND website = ' . $website->id);
            $rs = $DB->result();
            echo json_encode($rs);
            core_terminate();
            break;
        case 96:
            // return category paths
            echo json_encode(path::loadElementPaths('structure', intval($_REQUEST['id'])));
            core_terminate();
            break;
        case 'json_find_user':
            // json find user by name request (for "moderator" autocomplete)
            $DB->query('
				SELECT id, username as text
				  FROM nv_users
				 WHERE username LIKE ' . protect('%' . $_REQUEST['username'] . '%') . '
		      ORDER BY username ASC
			     LIMIT 30', 'array
			');
            $rows = $DB->result();
            $total = $DB->foundRows();
            echo json_encode(array('items' => $rows, 'total_count' => $total));
            core_terminate();
            break;
        case 'json_find_item':
            // find items by its title
            // any language
            $template_filter = '';
            if (!empty($_REQUEST['template'])) {
                $template_filter = ' AND nvi.template = ' . protect($_REQUEST['template']) . ' ';
            }
            if (!empty($_REQUEST['association'])) {
                $template_filter = ' AND nvi.association = ' . protect($_REQUEST['association']) . ' ';
            }
            if (isset($_REQUEST['embedding'])) {
                $template_filter = ' AND nvi.embedding = ' . protect($_REQUEST['embedding']) . ' ';
            }
            $text = $_REQUEST['title'];
            if (!empty($_REQUEST['term'])) {
                // tagit request
                $text = $_REQUEST['term'];
            }
            $DB->query('
				SELECT SQL_CALC_FOUND_ROWS DISTINCT nvw.node_id as id, nvw.text as text
				  FROM nv_webdictionary nvw, nv_items nvi
				 WHERE nvw.node_type = "item"
				   AND nvw.node_id = nvi.id
				   ' . $template_filter . '
				   AND nvw.subtype = "title"
				   AND nvw.website = ' . $website->id . '
				   AND nvw.website = nvi.website
				   AND nvw.text LIKE ' . protect('%' . $text . '%') . '
		        GROUP BY nvw.node_id, nvw.text
		        ORDER BY nvw.text ASC
			     LIMIT ' . intval($_REQUEST['page_limit']) . '
			     OFFSET ' . max(0, intval($_REQUEST['page_limit']) * (intval($_REQUEST['page']) - 1)), 'array');
            $rows = $DB->result();
            $total = $DB->foundRows();
            if ($_REQUEST['association'] == 'free') {
                for ($i = 0; $i < count($rows); $i++) {
                    $rows[$i]['path'] = $DB->query_single('path', 'nv_paths', '	website = ' . protect($website->id) . ' AND 
							type="item" AND 
							object_id="' . $rows[$i]['id'] . '" AND 
							lang="' . $website->languages_list[0] . '"
						');
                    if (empty($rows[$i]['path'])) {
                        $rows[$i]['path'] = '/node/' . $rows[$i]['id'];
                    }
                }
            }
            if (empty($_REQUEST['format']) || $_REQUEST['format'] == 'select2') {
                echo json_encode(array('items' => $rows, 'totalCount' => $total));
            } else {
                if ($_REQUEST['format'] == 'tagit') {
                    $tags_json = array();
                    foreach ($rows as $row) {
                        $tags_json[] = json_decode('{ "id": "' . $row['id'] . '", "label": "' . $row['text'] . '", "value": "' . $row['text'] . '" }');
                    }
                    echo json_encode($tags_json);
                }
            }
            core_terminate();
            break;
        case 98:
            // change comment status
            if (empty($_REQUEST['id'])) {
                echo "false";
                core_terminate();
            }
            switch ($_REQUEST['opt']) {
                case 'publish':
                    $DB->execute('
						UPDATE nv_comments
						   SET status = 0
						 WHERE website = ' . $website->id . ' AND
						       id = ' . $_REQUEST['id']);
                    break;
                case 'unpublish':
                    $DB->execute('
						UPDATE nv_comments
						   SET status = 1
						 WHERE website = ' . $website->id . ' AND
						       id = ' . $_REQUEST['id']);
                    break;
                case 'delete':
                    $DB->execute('
						DELETE FROM nv_comments
						 WHERE website = ' . $website->id . ' AND
							   id = ' . $_REQUEST['id']);
                    break;
            }
            $error = $DB->get_last_error();
            if (empty($error)) {
                echo 'true';
            } else {
                echo 'false';
            }
            core_terminate();
            break;
        case 'autosave':
            if (!empty($_REQUEST['id'])) {
                $iDictionary = array();
                foreach ($_REQUEST as $key => $value) {
                    if (strpos($key, 'section-') === 0) {
                        $lang = substr($key, -2, 2);
                        $kname = substr($key, 0, strlen($key) - 3);
                        $iDictionary[$lang][$kname] = $value;
                    }
                }
                $changed = webdictionary_history::save_element_strings('item', intval($_REQUEST['id']), $iDictionary, true);
                if ($changed) {
                    echo 'changes_saved';
                } else {
                    echo 'no_changes';
                }
                core_terminate();
            }
            echo 'false';
            core_terminate();
            break;
        case 'votes_reset':
            webuser_vote::remove_object_votes('item', intval($_REQUEST['id']));
            echo 'true';
            core_terminate();
            break;
        case 'votes_by_webuser':
            if ($_POST['oper'] == 'del') {
                $ids = explode(',', $_POST['id']);
                for ($i = 0; $i < count($ids); $i++) {
                    if ($ids[$i] > 0) {
                        $vote = new webuser_vote();
                        $vote->load($ids[$i]);
                        $vote->delete();
                    }
                }
                webuser_vote::update_object_score('item', $vote->object_id);
                echo 'true';
                core_terminate();
            }
            $max = intval($_GET['rows']);
            $page = intval($_GET['page']);
            $offset = ($page - 1) * $max;
            if ($_REQUEST['_search'] == 'false') {
                list($dataset, $total) = webuser_vote::object_votes_by_webuser('item', intval($_REQUEST['id']), $_REQUEST['sidx'] . ' ' . $_REQUEST['sord'], $offset, $max);
            }
            $out = array();
            for ($i = 0; $i < count($dataset); $i++) {
                if (empty($dataset[$i])) {
                    continue;
                }
                $out[$i] = array(0 => $dataset[$i]['id'], 1 => core_ts2date($dataset[$i]['date'], true), 2 => $dataset[$i]['username']);
            }
            navitable::jqgridJson($out, $page, $offset, $max, $total);
            core_terminate();
            break;
        case 'items_order':
            if (!empty($_POST['items-order'])) {
                // save new order
                $response = item::reorder($_POST['items-order']);
                if ($response !== true) {
                    echo $response['error'];
                } else {
                    echo 'true';
                }
            } else {
                // show ordered list
                echo items_order($_REQUEST['category']);
            }
            core_terminate();
            break;
        case 'json_tags_search':
            $tags = nvweb_tags_retrieve(null, null, 'top', $_REQUEST['term'], $_REQUEST['lang']);
            $tags_json = array();
            foreach (array_keys($tags) as $tag) {
                $tags_json[] = json_decode('{ "id": "' . $tag . '", "label": "' . $tag . '", "value": "' . $tag . '" }');
            }
            echo json_encode($tags_json);
            core_terminate();
            break;
        case 'json_tags_ranking':
            $tags = nvweb_tags_retrieve(100, null, 'top', null, $_REQUEST['lang']);
            $tags = array_keys($tags);
            echo json_encode($tags);
            core_terminate();
            break;
        case 'list':
        case 0:
            // list / search result
        // list / search result
        default:
            $out = items_list();
            break;
    }
    return $out;
}
Example #21
0
 /**
  * Prepare language info from input data.
  */
 private function prepareLanguages()
 {
     $lang = null;
     if (loader === 'front' && router::getInstance()->getPathLanguage() != null && language::getInstance()->canUse($this->getPathLanguage())) {
         // did we have language in path for front iface?
         $lang = router::getInstance()->getPathLanguage();
     } elseif ((loader === 'api' || loader === 'install') && language::getInstance()->canUse($_COOKIE['ffcms_lang'])) {
         // did language defined for API scripts?
         $lang = $_COOKIE['ffcms_lang'];
     } elseif ($_SERVER['HTTP_ACCEPT_LANGUAGE'] != null && language::getInstance()->canUse(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) && loader !== 'back') {
         // did we have lang mark in browser?
         $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
     } else {
         // no ? then use default language
         $lang = property::getInstance()->get('lang');
     }
     language::getInstance()->setUseLanguage($lang);
 }
Example #22
0
 public function property_definition($property_name)
 {
     // load properties if not already done
     if (empty($this->properties)) {
         if ($this->class == 'block_group_block') {
             $this->properties = property::load_properties('block_group_block', $this->_block_group_id, 'block_group_block', $this->id);
         } else {
             $this->properties = property::load_properties('block', $this->type, 'block', $this->id);
         }
     }
     for ($p = 0; $p < count($this->properties); $p++) {
         if ($this->properties[$p]->name == $property_name || $this->properties[$p]->id == $property_name) {
             $out = $this->properties[$p];
             break;
         }
     }
     return $out;
 }
Example #23
0
 /**
  * Check if $user_id can change karma rating for $target_id
  * @param $target_id
  * @param int $user_id
  * @return bool
  */
 public function canKarmaChange($target_id, $user_id = 0)
 {
     if ($user_id == 0) {
         $user_id = $this->get('id');
     }
     if ($user_id == $target_id || $user_id == 0) {
         return false;
     }
     if (!isset($this->karmadata[$user_id])) {
         $check_date = strtotime('-1 day');
         $stmt = database::getInstance()->con()->prepare("SELECT `to_id` FROM " . property::getInstance()->get('db_prefix') . "_user_karma WHERE `from_id` = ? AND `date` >= ?");
         $stmt->bindParam(1, $user_id, \PDO::PARAM_STR);
         $stmt->bindParam(2, $check_date, \PDO::PARAM_INT);
         $stmt->execute();
         $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         $stmt = null;
         foreach ($result as $row) {
             $this->karmadata[$user_id][] = $row['to_id'];
         }
     }
     return !in_array($target_id, $this->karmadata[$user_id]);
 }
Example #24
0
 public function nolang_uri()
 {
     $uri = system::getInstance()->altexplode('/', router::getInstance()->getUriString());
     if (!property::getInstance()->get('user_friendly_url')) {
         // remove /index.php if non friendy urls
         array_shift($uri);
     }
     if (property::getInstance()->get('use_multi_language')) {
         // remove /ru /en from uri
         array_shift($uri);
     }
     return system::getInstance()->altimplode('/', $uri);
 }
Example #25
0
function block_group_extension_block_options($block_group, $block_extension, $block_id, $block_uid, $status)
{
    global $layout;
    global $website;
    global $theme;
    if (empty($block_extension)) {
        throw new Exception("Unknown extension: {" . $block_extension . "} for block with uid:" . $block_uid);
    }
    $extension = new extension();
    $extension->load($block_extension);
    $block = block::extension_block($extension, $block_id);
    $properties = $block->properties;
    if (empty($properties)) {
        return;
    }
    $layout = null;
    $layout = new layout('navigate');
    if ($status !== null) {
        if ($status) {
            $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check');
        } else {
            $layout->navigate_notification(t(56, "Unexpected error"), true, true);
        }
    }
    $navibars = new navibars();
    $naviforms = new naviforms();
    $navibars->title(t(437, 'Block') . ' [' . $block_extension . ' / ' . $block_id . ']');
    $layout->navigate_media_browser();
    // we can use media browser in this function
    $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_media_browser();">
                <img height="16" align="absmiddle" width="16" src="img/icons/silk/images.png"> ' . t(36, 'Media') . '</a>'));
    $navibars->add_actions(array('<a href="#" onclick="navigate_tabform_submit(0);">
                <img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . '</a>'));
    $navibars->form();
    $navibars->add_tab(t(200, 'Options'));
    $navibars->add_tab_content($naviforms->hidden('form-sent', 'true'));
    // show a language selector (only if it's a multi language website)
    if (count($website->languages) > 1) {
        $website_languages_selector = $website->languages();
        $website_languages_selector = array_merge(array('' => '(' . t(443, 'All') . ')'), $website_languages_selector);
        $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $website_languages_selector, '', "navigate_tabform_language_selector(this);")));
    }
    $properties_values = property::load_properties(NULL, $block_id, "extension_block", $block_group, $block_uid);
    foreach ($properties as $option) {
        $property = new property();
        $property_value = '';
        foreach ($properties_values as $pv) {
            if ($pv->id == $option->id) {
                $property_value = $pv->value;
            }
        }
        $property->load_from_object($option, $property_value, $extension);
        if ($property->type == 'tab') {
            $navibars->add_tab($property->name);
            if (count($website->languages) > 1) {
                $website_languages_selector = $website->languages();
                $website_languages_selector = array_merge(array('' => '(' . t(443, 'All') . ')'), $website_languages_selector);
                $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $website_languages_selector, '', "navigate_tabform_language_selector(this);")));
            }
        }
        $navibars->add_tab_content(navigate_property_layout_field($property, $extension));
    }
    $layout->add_content('<div id="navigate-content" class="navigate-content ui-corner-all">' . $navibars->generate() . '</div>');
    navigate_property_layout_scripts();
    $layout->navigate_additional_scripts();
    $layout->add_script('
        $("html").css("background", "transparent");
    ');
    $out = $layout->generate();
    return $out;
}
Example #26
0
 public function init()
 {
     // loadExtensionsData()
     $query = "SELECT * FROM " . property::getInstance()->get('db_prefix') . "_extensions";
     $stmt = database::getInstance()->con()->query($query);
     $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     foreach ($result as $row) {
         foreach ($row as $key => $value) {
             $this->extconfigs[$row['type']][$row['dir']][$key] = $value;
         }
     }
 }
 public function property_exists($property_name)
 {
     global $theme;
     // load properties if not already done
     if (empty($this->properties)) {
         $this->properties = property::load_properties('webuser', $theme->name, 'webuser', $this->id);
     }
     for ($p = 0; $p < count($this->properties); $p++) {
         if ($this->properties[$p]->name == $property_name || $this->properties[$p]->id == $property_name) {
             return true;
         }
     }
     return false;
 }
Example #28
0
    public static function import_sample_properties($ws, $el_properties, $el, $files, $structure, $items, $real, $el_id, $item_uid)
    {
        global $DB;
        $el_properties_associative = array();
        foreach ($el_properties as $foo => $property) {
            if (!empty($property) && is_array($property)) {
                $property = $property[0];
            }
            if (empty($property->value)) {
                continue;
            }
            // get the original ID for files and categories
            // "translate" those IDs for the ones assigned on the new website
            // for example:
            // (old website) file id: 35    =>  (new website) file id: 3
            // ...and also translate nv:// urls in (text) properties values
            switch ($property->type) {
                case 'file':
                case 'image':
                    if (in_array($property->multilanguage, array('true', '1'))) {
                        foreach ($property->value as $plang => $pval) {
                            if (isset($files[$pval]->id)) {
                                $property->value[$plang] = $files[$pval]->id;
                            }
                        }
                    } else {
                        if (isset($files[$property->value]->id)) {
                            $property->value = $files[$property->value]->id;
                        }
                    }
                    break;
                case 'category':
                    if (in_array($property->multilanguage, array('true', '1'))) {
                        foreach ($property->value as $plang => $pval) {
                            if (isset($structure[$pval]->id)) {
                                $property->value[$plang] = $structure[$pval]->id;
                            }
                        }
                    } else {
                        if (isset($structure[$property->value]->id)) {
                            $property->value = $structure[$property->value]->id;
                        }
                    }
                    break;
                case 'categories':
                    if (in_array($property->multilanguage, array('true', '1'))) {
                        foreach ($property->value as $plang => $pval) {
                            $property_categories_old = explode(',', $pval);
                            $property_categories_new = array();
                            foreach ($property_categories_old as $oc) {
                                $property_categories_new[] = $structure[$oc]->id;
                            }
                            $property->value[$plang] = implode(',', $property_categories_new);
                        }
                    } else {
                        $property_categories_old = explode(',', $property->value);
                        $property_categories_new = array();
                        foreach ($property_categories_old as $oc) {
                            $property_categories_new[] = $structure[$oc]->id;
                        }
                        $property->value = implode(',', $property_categories_new);
                    }
                    break;
                case 'element':
                    // is multi-language forced for this property?
                    if (in_array($property->multilanguage, array('true', '1'))) {
                        foreach ($property->value as $olang => $oval) {
                            if (isset($items[$oval]->id)) {
                                $property->value[$olang] = $items[$oval]->id;
                            }
                        }
                    } else {
                        if (isset($items[$property->value]->id)) {
                            $property->value = $items[$property->value]->id;
                        }
                    }
                    break;
                default:
                    if (is_array($property->value)) {
                        // multilanguage property
                        foreach ($property->value as $lang => $pvalue) {
                            $property->value[$lang] = theme::import_sample_translate_nv_urls($pvalue, $structure, $items);
                        }
                    } else {
                        if (!is_string($property->value)) {
                            $property->value = theme::import_sample_translate_nv_urls($property->value, $structure, $items);
                        }
                    }
            }
            $el_properties_associative[$property->id] = $property->value;
        }
        if (!empty($el_properties_associative)) {
            if ($el == 'block_group_block') {
                $template = $real[$el_id]->code;
            } else {
                if ($el == 'block') {
                    $template = $real[$el_id]->type;
                } else {
                    $template = $real[$el_id]->template;
                    if (empty($template) && $el == 'item' && $real[$el_id]->embedding == 1) {
                        // we have to get the template set in the category of the item
                        $template = $DB->query_single('template', 'nv_structure', ' id = ' . protect($real[$el_id]->category) . ' AND 
								  website = ' . $ws->id);
                    }
                }
            }
            property::save_properties_from_array($el, $real[$el_id]->id, $template, $el_properties_associative, $ws, $item_uid);
        }
    }
 public function unix_locales()
 {
     global $session;
     if (is_callable('shell_exec') && false === stripos(ini_get('disable_functions'), 'shell_exec')) {
         $locales = shell_exec('locale -a');
         $tmp = explode("\n", $locales);
     } else {
         // default list of unix locales
         $locales = "aa_DJ,aa_ER,aa_ER@saaho,aa_ET,af_ZA,am_ET,an_ES,ar_AE,ar_BH,ar_DZ,ar_EG,ar_IN,ar_IQ,ar_JO,ar_KW,ar_LB,ar_LY,ar_MA,ar_OM,ar_QA,ar_SA,ar_SD,ar_SY,ar_TN,ar_YE,as_IN,ast_ES,az_AZ,be_BY,be_BY@latin,ber_DZ,ber_MA,bg_BG,bn_BD,bn_IN,bo_CN,bo_IN,bokmal,bokm,br_FR,bs_BA,byn_ER,C,ca_AD,ca_ES,ca_FR,ca_IT,catalan,crh_UA,croatian,csb_PL,cs_CZ,cv_RU,cy_GB,czech,da_DK,danish,dansk,de_AT,de_BE,de_CH,de_DE,de_LU,deutsch,dutch,dv_MV,dv_MV.utf8,dz_BT,dz_BT.utf8,eesti,el_CY,el_GR,en_AG,en_AU,en_BW,en_CA,en_DK,en_GB,en_HK,en_IE,en_IN,en_NG,en_NZ,en_PH,en_SG,en_US,en_ZA,en_ZW,es_AR,es_BO,es_CL,es_CO,es_CR,es_DO,es_EC,es_ES,es_GT,es_HN,es_MX,es_NI,es_PA,es_PE,es_PR,es_PY,es_SV,estonian,es_US,es_UY,es_VE,et_EE,eu_ES,fa_IR,fi_FI,fil_PH,finnish,fo_FO,franę ©s,fr_BE,fr_CA,fr_CH,french,fr_FR,fr_LU,fur_IT,fy_DE,fy_NL,ga_IE,galego,galician,gd_GB,german,gez_ER,gez_ET,gl_ES,greek,gu_IN,gv_GB,ha_NG,hebrew,he_IL,hi_IN,hne_IN,hr_HR,hrvatski,hsb_DE,ht_HT,hu_HU,hungarian,hy_AM,icelandic,id_ID,ig_NG,ik_CA,is_IS,italian,it_CH,it_IT,iu_CA,iw_IL,ja_JP,japanese,ka_GE,kk_KZ,kl_GL,km_KH,kn_IN,kok_IN,ko_KR,korean,ks_IN,ku_TR,kw_GB,ky_KG,lg_UG,li_BE,li_NL,lithuanian,lo_LA,lt_LT,lv_LV,mai_IN,mg_MG,mi_NZ,mk_MK,ml_IN,mn_MN,mr_IN,ms_MY,mt_MT,my_MM,nb_NO,nds_DE,nds_NL,ne_NP,nl_AW,nl_BE,nl_NL,nn_NO,no_NO,norwegian,nr_ZA,nso_ZA,nynorsk,oc_FR,om_ET,om_KE,or_IN,pa_IN,pap_AN,pa_PK,pl_PL,polish,portuguese,POSIX,ps_AF,pt_BR,pt_PT,romanian,ro_RO,ru_RU,russian,ru_UA,rw_RW,sa_IN,sc_IT,sd_IN,se_NO,shs_CA,sid_ET,si_LK,sk_SK,slovak,slovene,slovenian,sl_SI,so_DJ,so_ET,so_KE,so_SO,spanish,sq_AL,sq_MK,sr_ME,sr_RS,ss_ZA,st_ZA,sv_FI,sv_SE,swedish,ta_IN,te_IN,tg_TJ,thai,th_TH,ti_ER,ti_ET,tig_ER,tk_TM,tl_PH,tn_ZA,tr_CY,tr_TR,ts_ZA,tt_RU,turkish,ug_CN,uk_UA,ur_PK,uz_UZ,ve_ZA,vi_VN,wa_BE,wo_SN,xh_ZA,yi_US,yo_NG,zh_CN,zh_HK,zh_SG,zh_TW,zu_ZA";
         $tmp = explode(",", $locales);
     }
     $locales = array();
     $languages = language::language_names(false);
     $countries = property::countries($session['lang'], true);
     $tmp = array_filter($tmp);
     foreach ($tmp as $loc) {
         if (in_array($loc, array('C', 'POSIX'))) {
             continue;
         }
         if (strpos($loc, '.') === false) {
             if (in_array($loc . '.utf8', $tmp)) {
                 continue;
             }
         } else {
             // there is a dot in the locale name
             $check = substr($loc, 0, strpos($loc, '.')) . '.utf8';
             if (in_array($check, $tmp) && $check != $loc) {
                 continue;
             }
         }
         $language = @$languages[substr($loc, 0, 2)];
         if (empty($language)) {
             $language = '?';
         }
         $country = @$countries[substr($loc, 3, 2)];
         if (!empty($country)) {
             $country = ' (' . $country . ')';
         }
         $locales[$loc] = $language . $country . ' [' . $loc . ']';
     }
     return $locales;
 }
Example #30
0
 private function mysqlDump($dumpname)
 {
     require_once root . "/resource/phpmysqldumper/MySQLDump.php";
     $dumper = new \MySQLDump(new \mysqli(property::getInstance()->get('db_host'), property::getInstance()->get('db_user'), property::getInstance()->get('db_pass'), property::getInstance()->get('db_name')));
     $dumper->save(root . $dumpname);
 }