public static function addExtension($classname) { $class = get_called_class(); extension::add($class . '_CLASS', function () use($classname) { return $classname; }); }
public function init() { $token = isset($_SESSION['token']) ? $_SESSION['token'] : $_COOKIE['token']; $personal_id = isset($_SESSION['person']) ? $_SESSION['person'] : $_COOKIE['person']; $user_ip = system::getInstance()->getRealIp(); // data 1st raw check before sql is used if (strlen($token) == 32 && (filter_var($personal_id, FILTER_VALIDATE_EMAIL) || strlen($personal_id) > 0 && system::getInstance()->isLatinOrNumeric($personal_id))) { $query = "SELECT * FROM\r\n " . property::getInstance()->get('db_prefix') . "_user a,\r\n " . property::getInstance()->get('db_prefix') . "_user_access_level b,\r\n " . property::getInstance()->get('db_prefix') . "_user_custom c\r\n WHERE (a.email = ? OR a.login = ?) AND a.token = ? AND a.token_ip = ? AND a.aprove = 0 AND a.access_level = b.group_id AND a.id = c.id"; $stmt = database::getInstance()->con()->prepare($query); $stmt->bindParam(1, $personal_id, \PDO::PARAM_STR); $stmt->bindParam(2, $personal_id, \PDO::PARAM_STR); $stmt->bindParam(3, $token, \PDO::PARAM_STR, 32); $stmt->bindParam(4, $user_ip, \PDO::PARAM_STR); $stmt->execute(); if ($stmt->rowCount() == 1) { $result = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt = null; if (time() - $result[0]['token_start'] < property::getInstance()->get('token_time')) { $this->userindex = $result[0]['id']; foreach ($result[0] as $column_index => $column_data) { $this->userdata[$this->userindex][$column_index] = $column_data; } // set template variables template::getInstance()->set(template::TYPE_USER, 'id', $this->userindex); template::getInstance()->set(template::TYPE_USER, 'name', $this->userdata[$this->userindex]['nick']); template::getInstance()->set(template::TYPE_USER, 'admin', permission::getInstance()->have('global/owner')); template::getInstance()->set(template::TYPE_USER, 'admin_panel', permission::getInstance()->have('admin/main')); template::getInstance()->set(template::TYPE_USER, 'news_add', extension::getInstance()->getConfig('enable_useradd', 'news', extension::TYPE_COMPONENT, 'bol')); template::getInstance()->set(template::TYPE_USER, 'balance', $this->userdata[$this->userindex]['balance']); } } } }
private function cronInit() { foreach (extension::getInstance()->getAllParams() as $ext_type => $ext_data) { foreach ($ext_data as $ext_item) { if ($ext_item['enabled'] == 1) { $ext_file = root . '/extensions/' . $ext_type . '/' . $ext_item['dir'] . '/cron.php'; if (file_exists($ext_file)) { @(require_once $ext_file); $cname = 'cron_' . $ext_item['dir']; if (class_exists($cname)) { $link = new $cname(); if (method_exists($link, 'getInstance') && method_exists($link, 'make')) { $link::getInstance()->make(); } else { logger::getInstance()->log(logger::LEVEL_WARN, 'Method getInstance() or make() not founded in cron ' . $ext_file); } } else { logger::getInstance()->log(logger::LEVEL_WARN, 'Class ' . $cname . ' not founded in cron ' . $ext_file); } } } } } return null; }
public static function registerUser() { $sql = sql::factory(); $sql->setTable('community_user'); $sql->getPosts(['username' => 'string', 'password' => 'string', 'email' => 'string']); $validator = new validator(); $email = $sql->getPost('email'); $username = $sql->getPost('username'); $password = $sql->getPost('password'); $validUsername = $validator->costum($username, function () { preg_match('/\\w{4,}/', $username, $match); return $match[0] == $username; }); if (!$validUsername) { return 'Username darf nur aus Buchstaben Zahlen und Unterstrich bestehen und muss mindestens 4 Zeichen lang sein.'; } if ($sql->num('SELECT id FROM ' . sql::table('community_user') . ' WHERE `username`= "' . $sql->escape($username) . '"')) { return 'Benutzername schon vorhanden'; } if (!$validator->email($email)) { return 'Bitte geben Sie eine E-Mail Adresse an'; } $salt = userLogin::generateSalt(); $sql->addDatePost('registerdate', 'now'); $sql->addPost('salt', $salt); extension::get('COMMUNITY_USER_REGISTER', $sql); $password = userLogin::hash($password, $salt); $sql->addPost('password', $password); $sql->save(); //Mail send return true; }
public function getTemplate() { ob_start(); $content = self::generateArticle($this->get('id')); $content = extension::get('FRONTEND_OUTPUT', $content); dyn::add('content', $content); include dir::template(dyn::get('template'), $this->get('template')); $content = ob_get_contents(); ob_end_clean(); return $content; }
public static function fe($id = '', $params = []) { if ($id == '') { type::super('page_id', 'int', dyn::get('start_page')); } $url = extension::get('URL_REWRITE', ['id' => $id, 'params' => $params]); if (!extension::has('URL_REWRITE')) { $url = 'index.php?page_id=' . $id; foreach ($params as $name => $value) { $url .= '&' . $name . '=' . $value; } } return $url; }
public function getTemplate() { ob_start(); if (!pageCache::exist($this->get('id'))) { pageCache::generateArticle($this->get('id')); } $content = pageCache::read($this->get('id')); $content = pageArea::getEval($content); $content = extension::get('FRONTEND_OUTPUT', $content); dyn::add('content', $content); include dir::template(dyn::get('template'), $this->get('template')); $content = ob_get_contents(); ob_end_clean(); return $content; }
public function parseUrl($url) { $url = str_replace(dyn::get('hp_url'), '', $url); $url = trim($url, '/'); if (isset(self::$pathlist[$url])) { $id = self::$pathlist[$url]; extension::add('SET_PAGE_ID', function () use($id) { return $id; }); } if ($url == '') { $id = dyn::get('start_page'); } return $id; }
/** * Automatically binds extension events to Navigate CMS modules * It checks the "bindings" section of every extension definition */ public function extension_backend_bindings($ignore_permissions = true) { // when running inside Navigate CMS, this binds all extension events $extensions = extension::list_installed(null, $ignore_permissions); for ($e = 0; $e < count($extensions); $e++) { if (!isset($extensions[$e]['enabled']) || $extensions[$e]['enabled'] == '1') { if (!empty($extensions[$e]['bindings'])) { foreach ($extensions[$e]['bindings'] as $binding) { extension::include_php($extensions[$e]['code']); $this->bind($binding->module, $binding->event, $extensions[$e]['code'], $binding->function); } } } } }
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()); }
public static function addToPathlist($filter, $addonsUrls) { $addonnames = []; foreach (seo_control::getArticleNames(seo_control::getArticleByFilter($filter)) as $id => $name) { $name = rtrim($name, dyn::get('addons')['seo']['ending']); if ($name) { $name .= '/'; } foreach ($addonsUrls as $addonname) { $addonnames[$name . $addonname] = $id; } } extension::add('SEO_GENERATE_PATHLIST', function ($list) use($addonnames) { $list = array_merge($addonnames, $list); return $list; }); }
/** * Get admin interface all available permissions * @return array */ public function getAdminPermissions() { $ext = extension::getInstance()->getAllParams(); $result = array(); $general_rights = admin::getInstance()->getDefaultAccessRights(); foreach ($general_rights as $right) { $result[] = $right; } foreach ($ext as $ext_data) { foreach ($ext_data as $ext_item) { $ext_name = $ext_item['dir']; $ext_type = $ext_item['type']; $ext_enabled = $ext_item['enabled'] == 1; $pathway = root . '/extensions/' . $ext_type . '/' . $ext_name . '/back.php'; if ($ext_enabled && file_exists($pathway)) { $cname = $ext_type . '_' . $ext_name . '_back'; require_once $pathway; if (class_exists($cname)) { $init = new $cname(); if (method_exists($init, 'getInstance')) { $object = @$init::getInstance(); $data = null; if (method_exists($object, 'accessData')) { $data = @$object->accessData(); // @deprecated } elseif (method_exists($init, '_accessData')) { $data = @$object->_accessData(); } foreach ($data as $single) { $result[] = $single; } $init = null; } } } } } return $result; }
public static function checkLogin() { $username = type::post('username', 'string', ''); $password = type::post('password', 'string', ''); if ($username == '' || $password == '') { echo message::info(lang::get('login_form_notfull'), true); return; } $sql = sql::factory(); $sql->query('SELECT password, salt, id FROM ' . sql::table('community_user') . ' WHERE `username` = "' . $sql->escape($username) . '"'); if (!$sql->num()) { echo message::danger(sprintf(lang::get('login_no_user'), $email), true); return; } $sql->result(); if (!userLogin::checkPassword($password, $sql->get('salt'), $sql->get('password'))) { echo message::danger(lang::get('login_pwd_false'), true); return; } $_SESSION['community-login'] = $sql->get('id'); self::checkSession(); // Für spätere Foren-Bridges extension::get('COMMUNITY_USER_LOGIN', $password); }
public static function generatePathlist() { $return = []; $sql = sql::factory(); $sql->query('SELECT name, id, seo_costum_url, parent_id FROM ' . sql::table('structure'))->result(); while ($sql->isNext()) { if ($sql->get('seo_costum_url')) { $name = $sql->get('seo_costum_url'); } else { $name = self::makeSEOName($sql->get('name')); } if ($sql->get('parent_id')) { $name = self::getParentsName($sql->get('parent_id')) . '/' . $name; } if ($sql->get('id') == dyn::get('start_page') && dyn::get('addons')['seo']['start_url'] == 0) { $name = ''; } $return[$name] = (int) $sql->get('id'); $sql->next(); } $return = extension::get('SEO_GENERATE_PATHLIST', $return); return file_put_contents(dir::addon('seo', 'pathlist.json'), json_encode($return, JSON_PRETTY_PRINT)); }
//update devices having extension assigned to line(s) with new password $sql = "update v_device_lines set "; $sql .= "password = '******' "; $sql .= "where domain_uuid = '" . $domain_uuid . "' "; $sql .= "and server_address = '" . $_SESSION['domain_name'] . "' "; $sql .= "and user_id = '" . $extension . "' "; $db->exec(check_sql($sql)); unset($sql); } //if ($action == "update") //check the permissions if (permission_exists('extension_add') || permission_exists('extension_edit')) { //synchronize configuration if (is_writable($_SESSION['switch']['extensions']['dir'])) { require_once "app/extensions/resources/classes/extension.php"; $ext = new extension(); $ext->xml(); unset($ext); } //write the provision files if (is_dir($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . '/app/provision')) { require_once "app/provision/provision_write.php"; $ext = new extension(); } //clear the cache $cache = new cache(); $cache->delete("directory:" . $extension . "@" . $user_context); } //show the action and redirect the user if ($action == "add") { //prepare for alternating the row style
if (!is_null($error)) { echo message::danger($error); } elseif (!is_null($success)) { echo message::success($success); } layout::addNav(lang::get('dashboard'), 'dashboard', 'home', ['refresh'], true); layout::addNav(lang::get('settings'), 'settings', 'settings', [], false); layout::addNav(lang::get('server'), 'server', 'list', ['add'], true); layout::addNav(lang::get('addons'), 'addons', 'alt', [], true); layout::addNav(lang::get('user'), 'user', 'users', ['add'], true); foreach (addonConfig::includeAllConfig() as $file) { include $file; } if (userLogin::isLogged()) { $path = 'pages/' . $page . '.php'; $path = extension::get('PAGE_PATH', $path); if (file_exists($path)) { include $path; } else { echo message::danger(lang::get('page_not_found'), false); } } $content = ob_get_contents(); ob_end_clean(); rp::add('content', $content); if (ajax::is()) { echo ajax::getReturn(); die; } if (userLogin::isLogged()) { include dir::layout('index.php', rp::get('layout'));
$field->autofocus(); $template = template::factory(dyn::get('template')); $field = $form->addElement('template', $template->getTemplates('template', $form->get('template'))); $field->fieldName(lang::get('template')); $field = $form->addRadioField('online', $form->get('online')); $field->fieldName(lang::get('status')); $field->add(1, lang::get('online')); $field->add(0, lang::get('offline')); if ($action == 'edit') { $form->addHiddenField('id', $id); } extension::add('FORM_AFTER_SAVE', function ($sql) use($action, $id) { if ($action == 'add') { $id = $sql->insertId(); pageMisc::updateTime($id, true); } else { pageMisc::updateTime($id); } return $sql; }); if ($action == 'edit') { $title = $form->get('name'); } else { $title = lang::get('add'); } $buttons = ['<a class="btn btn-sm btn-warning" href="' . url::backend('structure', ['subpage' => 'pages', 'structure_id' => $form->get('id')]) . '">' . lang::get('modules') . '</a>', '<a class="btn btn-sm btn-default" href="' . url::backend('structure') . '">' . lang::get('back') . '</a>']; ?> <div class="row"><?php echo bootstrap::panel($title, $buttons, $form->show()); ?> </div>
/** * sync_extensions (public) * * 1) Reads directory "extensions/" and adds new record into table 'extension' for each found directory * 2) searches for file "extension.config.php" and reads the values in that file into the extension record * - add new admin-pages automatically, if needed * - add new templates automatically, if needed * - add new system word group, if needed * - import dictionary from language files * - run install/update SQL files * - check dependencies * * @package CMS * */ function sync_extensions() { global $site, $class_path; include_once $class_path . 'lang_functions.inc.php'; include_once $class_path . 'install.inc.php'; $ext_path = $site->absolute_path . 'extensions/'; $handle = opendir($ext_path); while (false !== ($dir = readdir($handle))) { if (is_dir($ext_path . $dir) && $dir != '.' && $dir != '..' && $dir != 'CVS') { $dirlist[] = $dir . "/"; } # if } # while closedir($handle); # if no dirs found => do nothing & return if (!count($dirlist)) { return; } sort($dirlist); ############ loop over extension directories foreach ($dirlist as $dir) { $is_install = false; # true, if found new extension $dir_absolute_path = $ext_path . $dir; $dir_relative_path = 'extensions/' . $dir; $dir_name = substr($dir, 0, -1); # printr($dir_absolute_path); # printr($dir_relative_path); ####### check if extension exists $extension = new extension(array(name => $dir_name)); ###### 1. extension not found in database => INSERT it if (!$extension->name) { $is_install = true; $sql = $site->db->prepare("INSERT INTO extensions (name,path,is_active) VALUES (?,?,?)", $dir_name, $dir_relative_path, '0'); $sth = new SQL($sql); #print($sql); $site->debug->msg($sth->debug->get_msgs()); ####### write log new Log(array('action' => 'create', 'component' => 'Extensions', 'message' => "New extension '" . $dir_name . "' inserted. (sync)")); # reload extension: $extension = new extension(array(name => $dir_name)); $no_delete_extension[] = $extension->id; } else { $no_delete_extension[] = $extension->id; ####### WRITE LOG new Log(array('action' => 'update', 'component' => 'Extensions', 'message' => "New extension '" . $dir_name . "' updated. (sync)")); } ####### 2. search for CONFIG FILE $conf_found = $extension->load_extension_config(); # now all config variables are in array $extension->CONF #printr($conf_found); ####### 3. UPDATE extension record # 3.A config file found => we have official ext, overwrite all record values with config file values if ($conf_found) { $sql = $site->db->prepare("UPDATE extensions SET path=?, is_official=?, title=?, description=?, author=?, version=?, version_date=?, icon_path=?, min_saurus_version=?, min_saurus_modules=?, is_downloadable=? WHERE name=?", $dir_relative_path, '1', $extension->CONF['title'], $extension->CONF['description'], $extension->CONF['author'], $extension->CONF['version'], $extension->CONF['version_date'], $extension->CONF['icon_path'], $extension->CONF['min_saurus_version'], $extension->CONF['min_saurus_modules'], $extension->CONF['is_downloadable'] == '1' ? '1' : '0', $extension->name); } else { $sql = $site->db->prepare("UPDATE extensions SET path=?, is_official=? WHERE name=?", $dir_relative_path, '0', $extension->name); } # official or custom ext $sth = new SQL($sql); #print($sql); $site->debug->msg($sth->debug->get_msgs()); ####### 4. CREATE ADMIN-PAGES if (count($extension->CONF['adminpages']) > 0) { #printr($extension->CONF['adminpages']); ## get minimum sorteering from main menu "Extensions" $sql = $site->db->prepare("SELECT MIN(sorteering) AS min_sorteering FROM admin_osa WHERE parent_id=?", '86'); $sth = new SQL($sql); #print($sql); $site->debug->msg($sth->debug->get_msgs()); $min_sorteering = $sth->fetchsingle(); $min_sorteering = intval($min_sorteering) - 1; ## find new ID, must be 1000...-> $sql = $site->db->prepare("SELECT MAX(id) FROM admin_osa WHERE id >= 1000"); $sth = new SQL($sql); $site->debug->msg($sth->debug->get_msgs()); $max_id = $sth->fetchsingle(); if ($max_id) { $max_id++; } else { $max_id = 1000; } foreach ($extension->CONF['adminpages'] as $adminpage) { ## parent ID is hardcoded "86": Extensions #check if adminpage exists: $sql = $site->db->prepare("SELECT id FROM admin_osa WHERE eng_nimetus=? AND parent_id=? AND extension=?", $adminpage["name"], '86', $extension->name); $sth = new SQL($sql); $adminpage_id = $sth->fetchsingle(); ## if not found => INSERT if (!$adminpage_id) { $sql = $site->db->prepare("INSERT INTO admin_osa (id, parent_id, sorteering, eng_nimetus, fail, moodul_id, extension) VALUES (?, ?, ?, ?, ?, ?, ?)", $max_id, 86, $min_sorteering, $adminpage["name"], $site->CONF['wwwroot'] . '/' . $extension->path . $adminpage["file"], 0, $extension->name); $max_id++; #######write log new Log(array('action' => 'create', 'component' => 'Extensions', 'message' => "Extension '" . $extension->name . "': new admin-page '" . $adminpage["name"] . "' inserted (sync)")); } else { $sql = $site->db->prepare("UPDATE admin_osa SET eng_nimetus=?, fail=?, extension=? WHERE id=?", $adminpage["name"], $site->CONF['wwwroot'] . '/' . $extension->path . $adminpage["file"], $extension->name, $adminpage_id); $no_delete_list[] = $adminpage_id; } $sth = new SQL($sql); if (!$adminpage_id) { $no_delete_list[] = $sth->insert_id; } #print($sql); $site->debug->msg($sth->debug->get_msgs()); ####################### # save system word to group "admin": include_once $class_path . 'adminpage.inc.php'; // get admin section key (should always be 12, but in any case) $sql = "select sst_id from sys_sona_tyyp where voti = 'admin'"; $result = new SQL($sql); $sst_id = $result->fetchsingle(); // insert the same translation for every active language $sql = 'select distinct glossary_id as keel_id from keel where on_kasutusel = 1'; $result = new SQL($sql); while ($row = $result->fetch('ASSOC')) { save_systemword(array('sysword' => $adminpage['name'], 'translation' => $adminpage['name'], 'lang_id' => $row['keel_id'], 'sst_id' => $sst_id)); } } # loop over adminpages if (!empty($extension->name)) { new sql("delete from admin_osa where extension='" . $extension->name . "' and id not in (" . implode(",", $no_delete_list) . ")"); } } # if adminpages found ####### 5. CREATE TEMPLATES if (count($extension->CONF['templates']) > 0) { #printr($extension->CONF['templates']); $sql = $site->db->prepare("SELECT max(ttyyp_id) FROM templ_tyyp WHERE ttyyp_id >= 1000 AND ttyyp_id < 2000 OR ttyyp_id >= 2100"); $sth = new SQL($sql); $site->debug->msg($sth->debug->get_msgs()); $max_id = $sth->fetchsingle(); if ($max_id) { $max_id++; } else { $max_id = 1000; } ############## loop over templates foreach ($extension->CONF['templates'] as $template) { #check if template exists: $template['op'] = translate_ee($template['op']); /* get op: dont overwrite existing values */ $sql = $site->db->prepare("SELECT op FROM templ_tyyp WHERE op=? AND nimi<>?;", $template['op'], $template['name']); $sth = new SQL($sql); $op_found = $sth->fetchsingle(); if ($op_found) { $template['op'] = ''; # dont overwrite } $sql = $site->db->prepare("SELECT ttyyp_id FROM templ_tyyp WHERE nimi=? AND extension=?", $template["name"], $extension->name); $sth = new SQL($sql); $template_id = $sth->fetchsingle(); ## if not found => INSERT if (!$template_id) { $sql = $site->db->prepare("INSERT INTO templ_tyyp (ttyyp_id, nimi, templ_fail, on_page_templ, on_nahtav, extension, op, is_readonly, is_default, preview, preview_thumb) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $max_id, $template['name'], '../../../' . $extension->path . $template['file'], $template['is_page'] ? 1 : 0, $template['is_visible'] ? 1 : 0, $extension->name, $template['op'], $template['is_readonly'] ? 1 : 0, $template['is_default'] ? 1 : 0, $template['preview'], $template['preview_thumb']); $max_id++; #######write log new Log(array('action' => 'create', 'component' => 'Extensions', 'message' => "Extension '" . $extension->name . "': new template '" . $template["name"] . "' inserted (sync)")); } else { $sql = $site->db->prepare("UPDATE templ_tyyp SET nimi=?, templ_fail=?, on_page_templ=?, on_nahtav=?, extension=?, op=" . ($template['op'] ? "'" . mysql_real_escape_string($template['op']) . "'" : 'op') . ", is_readonly=?, is_default = ?, preview = ?, preview_thumb = ? WHERE ttyyp_id=?", $template['name'], '../../../' . $extension->path . $template['file'], $template['is_page'] ? 1 : 0, $template['is_visible'] ? 1 : 0, $extension->name, $template['is_readonly'] ? 1 : 0, $template['is_default'] ? 1 : 0, $template['preview'], $template['preview_thumb'], $template_id); } $sth = new SQL($sql); #print($sql.'<br />'); $site->debug->msg($sth->debug->get_msgs()); } # loop over templates } # if templates found ####### 6. CREATE SYSTEMWORD GROUP in GLOSSARY # check if systemword group with that name exists $sql = $site->db->prepare("SELECT sst_id FROM sys_sona_tyyp WHERE voti=?", $extension->name); $sth = new SQL($sql); $sst_id = $sth->fetchsingle(); # UPDATE glossary group name if ($sst_id) { $sql = $site->db->prepare("UPDATE sys_sona_tyyp SET voti=?, nimi=?, extension=? WHERE sst_id=?", $extension->name, $extension->CONF['title'] ? $extension->CONF['title'] : $extension->name, $extension->name, $sst_id); $sth = new SQL($sql); } else { # find new sst ID (must be >= 100; 0...100 are reserved for Saurus internal use) $sql = $site->db->prepare("SELECT MAX(sst_id) FROM sys_sona_tyyp"); $sth = new SQL($sql); $site->debug->msg($sth->debug->get_msgs()); $max_id = $sth->fetchsingle(); if ($max_id >= 100) { $max_id++; } else { $max_id = 100; } $sql = $site->db->prepare("INSERT INTO sys_sona_tyyp (sst_id, voti, nimi, extension) VALUES (?,?,?,?)", $max_id, $extension->name, $extension->CONF['title'] ? $extension->CONF['title'] : $extension->name, $extension->name); $sth = new SQL($sql); ####### write log new Log(array('action' => 'create', 'component' => 'Extensions', 'message' => "Extension '" . $extension->name . "': new glossary group '" . $extension->CONF['title'] . "' inserted (sync)")); } ########## 7. import dictionary from language files if ($extension->name) { /* get site's languages and encodings */ $languages = array(); $sql = 'select distinct glossary_id as keel_id, encoding from keel where on_kasutusel = 1;'; $result = new SQL($sql); while ($lang = $result->fetch('ASSOC')) { if (file_exists($site->absolute_path . 'extensions/' . $extension->name . '/lang/' . $lang['encoding'] . '/language' . $lang['keel_id'] . '.csv')) { import_dict_from_file($site->absolute_path . 'extensions/' . $extension->name . '/lang/' . $lang['encoding'] . '/language' . $lang['keel_id'] . '.csv'); } } } ####### 4. RUN INSTALL/UPDATE SQL FILES # 8A. if INSTALLING new extension then run all *.sql files in extension folder "install/" if ($is_install) { $ext_install_path = $dir_absolute_path . 'install/'; if (is_dir($ext_install_path)) { # if install/ exists, Bug #2442 $handle = opendir($ext_install_path); while (false !== ($dir = readdir($handle))) { if (is_file($file = $ext_install_path . $dir) && $dir != '.' && $dir != '..' && $dir != 'CVS') { $tmp_parts = pathinfo($ext_install_path . $dir); ## if file extension is "sql" (case insensitive) => run sql files if (strtoupper($tmp_parts['extension']) == 'SQL') { # if ($fd = fopen($file, "r")) { $sql = fread($fd, filesize($file)); fclose($fd); # if there is smth in file if ($sql) { $pieces = split_sql_file($sql, ';'); // now $pieces is an array of all sql directives to launch foreach ($pieces as $query) { $sth = new SQL($query); if ($sth->error) { print "<font color=red>Error: " . $sth->error . "</font><br />"; } $i++; } } # data found } else { echo "<font color=red>Can't open data file \"<b>" . $filename . "</b>\" - access denied</font><br />"; } # cant open sql file } # if sql file } # file } # while closedir($handle); } # if dir exists } else { } # is update ############# 9. CHECK DEPENDENCIES $extension->check_dependencies(); } // Delete non-existing extensions if (is_array($no_delete_extension)) { $sth = new SQL("select name from extensions where extension_id not in (" . implode(",", $no_delete_extension) . ")"); while ($r = $sth->fetch("ASSOC")) { $extension = new extension(array(name => $r['name'])); $extension->uninstall(); } } ############ / loop over extension directories }
$subpage = type::super('subpage', 'string'); $successMsg = type::get('success_msg', 'string'); $errorMsg = type::get('error_msg', 'string'); if (!is_null($errorMsg)) { echo message::danger($errorMsg); } elseif (!is_null($successMsg)) { echo message::success($successMsg); } if (userLogin::isLogged()) { if ($file = backend::getNaviInclude()) { include $file; } } $content = ob_get_contents(); ob_end_clean(); $content = extension::get('BACKEND_OUTPUT', $content); dyn::add('content', $content); if (ajax::is()) { $deleteAction = type::get('deleteAction', 'bool', false); if ($deleteAction) { $title = type::get('title', 'string'); $message = type::get('message', 'string'); getDeleteModal($title, $message); } echo ajax::getReturn(); die; } if (userLogin::isLogged()) { include dir::backend('layout/index.php'); } else { include dir::backend('layout/login.php');
function items_form($item) { global $user; global $DB; global $website; global $layout; global $theme; global $events; global $current_version; $navibars = new navibars(); $naviforms = new naviforms(); $layout->navigate_media_browser(); // we can use media browser in this function $extra_actions = array(); if (empty($item->id)) { $navibars->title(t(22, 'Items') . ' / ' . t(38, 'Create')); } else { $navibars->title(t(22, 'Items') . ' / ' . t(170, 'Edit') . ' [' . $item->id . ']'); } $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_media_browser();" title="Ctrl+M"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/images.png"> ' . t(36, 'Media') . ' </a>')); if (empty($item->id)) { $navibars->add_actions(array($user->permission('items.create') == 'true' ? '<a href="#" onclick="navigate_items_tabform_submit(1);" title="Ctrl+S"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . ' </a>' : "")); } else { $navibars->add_actions(array($user->permission('items.edit') == 'true' || $item->author == $user->id ? '<a href="#" onclick="navigate_items_tabform_submit(1);" title="Ctrl+S"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . ' </a>' : "", $user->permission("items.delete") == 'true' ? '<a href="#" onclick="navigate_delete_dialog();"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/cancel.png"> ' . t(35, 'Delete') . ' </a>' : "")); $extra_actions[] = '<a href="#" onclick="navigate_items_preview();"><img height="16" align="absmiddle" width="16" src="img/icons/silk/monitor.png"> ' . t(274, 'Preview') . '</a>'; if ($user->permission("items.create") != 'false') { $extra_actions[] = '<a href="?fid=items&act=duplicate&id=' . $item->id . '"><img height="16" align="absmiddle" width="16" src="img/icons/silk/page_copy.png"> ' . t(477, 'Duplicate') . '</a>'; } $layout->add_script(' function navigate_delete_dialog() { navigate_confirmation_dialog( function() { window.location.href = "?fid=items&act=delete&id=' . $item->id . '"; }, null, null, "' . t(35, 'Delete') . '" ); } '); } if (!empty($item->id)) { $notes = grid_notes::comments('item', $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)) { // we attach an event to "items" which will be fired by navibars to put an extra button $events->add_actions('items', array('item' => &$item, 'navibars' => &$navibars), $extra_actions); } if (!empty($item->id)) { $layout->navigate_notes_dialog('item', $item->id); } $navibars->add_actions(array(!empty($item->id) ? '<a href="?fid=items&act=edit"><img height="16" align="absmiddle" width="16" src="img/icons/silk/add.png"> ' . t(38, 'Create') . '</a>' : '', '<a href="?fid=items&act=list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/application_view_list.png"> ' . t(39, 'List') . '</a>', 'search_form')); // languages $ws_languages = $website->languages(); $navibars->form('', 'fid=items&act=edit&id=' . $item->id); $layout->add_script("\r\n \$(document).on('keydown.ctrl_s', function (evt) { navigate_items_tabform_submit(1); return false; } );\r\n \$(document).on('keydown.ctrl_m', function (evt) { navigate_media_browser(); return false; } );\r\n "); $layout->add_script(' var template_sections = []; '); $navibars->add_tab(t(43, "Main")); // tab #0 $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>')); if (empty($item->id)) { $item->date_to_display = core_time(); } $navibars->add_tab_content_row(array('<label>' . t(551, 'Date to display') . '</label>', $naviforms->datefield('date_to_display', $item->date_to_display, true))); $navibars->add_tab_content_row(array('<label>' . t(85, 'Date published') . '</label>', $naviforms->datefield('date_published', $item->date_published, true))); $navibars->add_tab_content_row(array('<label>' . t(90, 'Date unpublished') . '</label>', $naviforms->datefield('date_unpublish', $item->date_unpublish, true))); $navibars->add_tab_content_row(array('<label>' . t(364, 'Access') . '</label>', $naviforms->selectfield('access', array(0 => 0, 1 => 2, 2 => 1, 3 => 3), array(0 => t(254, 'Everybody'), 1 => t(362, 'Not signed in'), 2 => t(361, 'Web users only'), 3 => t(512, 'Selected web user groups')), $item->access, 'navigate_webuser_groups_visibility($(this).val());', false, array(1 => t(363, 'Users who have not yet signed in'))))); $webuser_groups = webuser_group::all_in_array(); $navibars->add_tab_content_row(array('<label>' . t(506, "Groups") . '</label>', $naviforms->multiselect('groups', array_keys($webuser_groups), array_values($webuser_groups), $item->groups)), 'webuser-groups-field'); $layout->add_script(' function navigate_webuser_groups_visibility(access_value) { if(access_value==3) $("#webuser-groups-field").show(); else $("#webuser-groups-field").hide(); } navigate_webuser_groups_visibility(' . $item->access . '); '); $permission_options = array(0 => t(69, 'Published'), 1 => t(70, 'Private'), 2 => t(81, 'Hidden')); if ($user->permission("items.publish") == 'false') { if (!isset($item->permission)) { $item->permission = 1; } $navibars->add_tab_content_row(array('<label>' . t(68, 'Status') . '</label>', $permission_options[$item->permission], $naviforms->hidden("permission", $item->permission))); } else { $navibars->add_tab_content_row(array('<label>' . t(68, 'Status') . '</label>', $naviforms->selectfield('permission', array_keys($permission_options), array_values($permission_options), $item->permission, '', false, array(0 => t(360, 'Visible to everybody'), 1 => t(359, 'Visible only to Navigate CMS users'), 2 => t(358, 'Hidden to everybody'))), '<span id="status_info" class="ui-icon ui-icon-alert" data-message="' . t(618, 'Change the status to Published to see the item on the future publication date currently assigned', false, true) . '" style="display: none; float: none; vertical-align: middle; "></span>')); } if (empty($item->id)) { $item->author = $user->id; } $author_webuser = $DB->query_single('username', 'nv_users', ' id = ' . $item->author); $navibars->add_tab_content($naviforms->hidden('item-author', $item->author)); $navibars->add_tab_content_row(array('<label>' . t(266, 'Author') . '</label>', $naviforms->textfield('item-author-text', $author_webuser))); // script#1 if ($item->date_modified > 0) { $navibars->add_tab_content_row(array('<label>' . t(227, 'Date modified') . '</label>', core_ts2date($item->date_modified, true))); } if ($item->date_created > 0) { $navibars->add_tab_content_row(array('<label>' . t(226, 'Date created') . '</label>', core_ts2date($item->date_created, true))); } $navibars->add_tab_content_row(array('<label>' . t(280, 'Page views') . '</label>', $item->views), "div_page_views"); $navibars->add_tab(t(87, "Association")); // tab #1 $navibars->add_tab_content_row(array('<label>' . t(87, "Association") . '</label>', $naviforms->buttonset('association', array('free' => t(100, 'Free'), 'category' => t(78, 'Category')), empty($item->id) ? 'category' : $item->association, "navigate_change_association(this);"))); $hierarchy = structure::hierarchy(0); $categories_list = structure::hierarchyList($hierarchy, $item->category); if (empty($categories_list)) { $categories_list = '<ul><li value="0">' . t(428, '(no category)') . '</li></ul>'; } $navibars->add_tab_content_row(array('<label>' . t(78, 'Category') . '</label>', $naviforms->dropdown_tree('category', $categories_list, $item->category, 'navigate_item_category_change')), 'div_category_tree'); $layout->add_script(' function navigate_item_category_change(id) { $.ajax( { url: NAVIGATE_APP + "?fid=" + navigate_query_parameter("fid") + "&act=96&id=" + id, dataType: "json", data: {}, success: function(data, textStatus, xhr) { item_category_path = data; } }); } '); $navibars->add_tab_content_row(array('<label>' . t(162, 'Embedding') . '</label>', $naviforms->buttonset('embedding', array('1' => t(163, 'Embedded'), '0' => t(164, 'Own path')), empty($item->id) ? '1' : intval($item->embedding), "navigate_change_association();"), '<span id="embedding_info" class="ui-icon ui-icon-info" data-message-title-1="' . t(163, 'Embedded', false, true) . '" data-message-content-1="' . t(165, 'Full content is shown on category page. Ex. "Who we are?"', false, true) . '" data-message-title-2="' . t(164, 'Own path', false, true) . '" data-message-content-2="' . t(166, 'The content is accessed through its own url. Ex. "News"', false, true) . '" style="float: left; margin-left: -4px;"> </span>'), 'div_category_embedded'); $navibars->add_tab_content_row(array('<label>' . t(22, 'Elements') . '</label>', '<button style="float: left;">' . t(171, 'Order') . '</button>', '<span id="order_info" class="ui-icon ui-icon-info" data-message="' . t(425, 'Order elements of a category (unless the template forces other sorting)', false, true) . '" style="float: left; margin-left: 2px;"> </span>', '<div id="items_order_window" style="display: none;"></div>'), 'div_category_order'); $layout->add_script(' $("#div_category_order button").button( { icons: { primary: "ui-icon-arrowthick-2-n-s" } }).on("click", function(e) { e.stopPropagation(); e.preventDefault(); navigate_status(navigate_t(6, "Loading") + "...", "loader"); $("#items_order_window").load("?fid=items&act=items_order&category=" + $("#category").val() + "&_bogus=" + new Date().getTime(), function() { navigate_status(navigate_t(42, "Ready"), "ready"); $("#items_order_window").dialog({ modal: true, title: "' . t(171, 'Order') . '", width: 600, height: 500, buttons: { "' . t(58, 'Cancel') . '": function() { $(this).dialog("destroy"); }, "' . t(190, 'Ok') . '": function() { var dialog = this; // save $.post( "?fid=items&act=items_order&category=" + $("#category").val() + "&_bogus=" + new Date().getTime(), { "items-order": $("#items-order").val() }, function(response) { if(response=="true") { $(dialog).dialog("destroy"); } else { $("<div>"+response+"</div>").dialog({ modal: true, title: "' . t(56, "Unexpected error") . '" }); } } ); } } }); }); }); '); $templates = template::elements('element'); $template_select = $naviforms->select_from_object_array('template', $templates, 'id', 'title', $item->template); $navibars->add_tab_content_row(array('<label>' . t(79, 'Template') . '</label>', $template_select, '<span id="template_info" class="ui-icon ui-icon-alert" data-message="' . t(619, "Template changed, please Save now to see the changes in the next tabs", false, true) . '" style="display: none; float: none; vertical-align: middle; "></span>'), 'div_template_select'); $layout->add_script(' var last_check = []; var active_languages = ["' . implode('", "', array_keys($ws_languages)) . '"]; $("#div_template_select").hide(); '); // script#3 if (!empty($item->id)) { $navibars->add_tab(t(9, "Content")); // tab #2 $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $ws_languages, $website->languages_list[0], "navigate_items_select_language(this);"))); $template = $item->load_template(); $translate_extensions = extension::list_installed('translate', false); foreach ($website->languages_list as $lang) { $navibars->add_tab_content('<div class="language_fields" id="language_fields_' . $lang . '" style=" display: none; ">'); $navibars->add_tab_content_row(array('<label>' . t(67, 'Title') . '</label>', $naviforms->textfield('title-' . $lang, @$item->dictionary[$lang]['title']))); $open_live_site = ''; if (!empty($item->paths[$lang])) { $open_live_site = ' <a target="_blank" href="' . $website->absolute_path(true) . $item->paths[$lang] . '"><img src="img/icons/silk/world_go.png" align="absmiddle" /></a>'; } $navibars->add_tab_content_row(array('<label>' . t(75, 'Path') . $open_live_site . '</label>', $naviforms->textfield('path-' . $lang, @$item->paths[$lang], NULL, 'navigate_items_path_check(this, event);'), '<span> </span>'), 'div_path_' . $lang); if (!isset($template->sections)) { $template->sections[] = array(0 => array('id' => 'main', 'name' => '#main#', 'editor' => 'tinymce', 'width' => '960px')); } if (!is_array($template->sections)) { $template->sections = array(); } // compatibility fix: auto-correct template sections with missing ID (only "code" provided) for ($s = 0; $s < count($template->sections); $s++) { if (!isset($template->sections[$s]['id'])) { $template->sections[$s]['id'] = $template->sections[$s]['code']; } } foreach ($template->sections as $section) { if (is_object($section)) { $section = (array) $section; } // ignore empty sections if (empty($section)) { continue; } if ($section['editor'] == 'tinymce') { $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'] . '(\'section-' . $section['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); } } $navibars->add_tab_content_row(array('<label>' . template::section_name($section['name']) . '<span class="editor_selector" for="section-' . $section['id'] . '-' . $lang . '">' . '<i class="fa fa-border fa-fw fa-lg fa-file-text-o active" data-action="tinymce" title="' . t(614, "Edit with TinyMCE") . '"></i> ' . '<i class="fa fa-border fa-fw fa-lg fa-code" data-action="html" title="' . t(615, "Edit as source code") . '"></i> ' . '<i class="fa fa-border fa-fw fa-lg fa-eraser" data-action="clear" title="' . t(208, "Remove all content") . '"></i>' . '</span>' . '</label>', $naviforms->editorfield('section-' . $section['id'] . '-' . $lang, @$item->dictionary[$lang]['section-' . $section['id']], $section['width'] + 48 . 'px', $lang), '<div style="clear:both; margin-top:5px; float:left; margin-bottom: 10px;">', '<label> </label>', $translate_menu, '<button onclick="navigate_items_copy_from_dialog(\'section-' . $section['id'] . '-' . $lang . '\'); return false;"><img src="img/icons/silk/page_white_copy.png" align="absmiddle"> ' . t(189, 'Copy from') . '...</button> ', '<button onclick="navigate_items_copy_from_history_dialog(\'section-' . $section['id'] . '-' . $lang . '\', \'' . $section['id'] . '\', \'' . $lang . '\', \'' . $section['editor'] . '\'); return false;"><img src="img/icons/silk/time_green.png" align="absmiddle"> ' . t(40, 'History') . '</button> ', !empty($theme->content_samples) ? '<button onclick="navigate_items_copy_from_theme_samples(\'section-' . $section['id'] . '-' . $lang . '\', \'' . $section['id'] . '\', \'' . $lang . '\', \'' . $section['editor'] . '\'); return false;"><img src="img/icons/silk/rainbow.png" align="absmiddle"> ' . t(553, 'Fragments') . ' | ' . $theme->title . '</button> ' : '', '</div>', '<br />'), '', 'lang="' . $lang . '"'); } else { if ($section['editor'] == 'html') { $navibars->add_tab_content_row(array('<label>' . template::section_name($section['name']) . '</label>', $naviforms->scriptarea('section-' . $section['id'] . '-' . $lang, @$item->dictionary[$lang]['section-' . $section['id']], 'html', ' width: ' . $section['width'] . 'px'), '<div style="clear:both; margin-top:5px; float:left; margin-bottom: 10px;">', '<label> </label>', '<button onclick="navigate_items_copy_from_history_dialog(\'section-' . $section['id'] . '-' . $lang . '\', \'' . $section['id'] . '\', \'' . $lang . '\', \'' . $section['editor'] . '\'); return false;"><img src="img/icons/silk/time_green.png" align="absmiddle"> ' . t(40, 'History') . '</button> ', !empty($theme->content_samples) ? '<button onclick="navigate_items_copy_from_theme_samples(\'section-' . $section['id'] . '-' . $lang . '\', \'' . $section['id'] . '\', \'' . $lang . '\', \'' . $section['editor'] . '\'); return false;"><img src="img/icons/silk/rainbow.png" align="absmiddle"> ' . t(553, 'Fragments') . ' | ' . $theme->title . '</button> ' : '', '</div>', '<br />'), '', 'lang="' . $lang . '"'); } else { $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_textarea_translate_' . $te['code'] . '(\'section-' . $section['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); } } $navibars->add_tab_content_row(array('<label>' . template::section_name($section['name']) . '</label>', $naviforms->textarea('section-' . $section['id'] . '-' . $lang, @$item->dictionary[$lang]['section-' . $section['id']], 8, 48, ' width: ' . $section['width'] . 'px'), '<div style="clear:both; margin-top:5px; margin-bottom: 10px; ">', '<label> </label>', $translate_menu, '<button onclick="navigate_items_copy_from_history_dialog(\'section-' . $section['id'] . '-' . $lang . '\', \'' . $section['id'] . '\', \'' . $lang . '\', \'' . $section['editor'] . '\'); return false;"><img src="img/icons/silk/time_green.png" align="absmiddle"> ' . t(40, 'History') . '</button> ', !empty($theme->content_samples) ? '<button onclick="navigate_items_copy_from_theme_samples(\'section-' . $section['id'] . '-' . $lang . '\', \'' . $section['id'] . '\', \'' . $lang . '\', \'' . $section['editor'] . '\'); return false;"><img src="img/icons/silk/rainbow.png" align="absmiddle"> ' . t(553, 'Fragments') . ' | ' . $theme->title . '</button> ' : '', '</div>'), '', 'lang="' . $lang . '"'); } } } if ($template->tags == 1 || $template->tags == 'true') { $tags_copy_select = ''; $tags_copy_select_pre = ''; $tags_copy_select_after = ''; // allow copying tags between languages? if (count($website->languages_list) > 1) { $tags_copy_select = $naviforms->selectfield('', array_keys($ws_languages), array_values($ws_languages), '', '', false, '', ' width: auto; position: absolute; margin-top: 1px; ', false); $tags_copy_select = ' <div style=" position: relative; margin-left: 600px; margin-top: -57px; width: 200px; height: 68px; "> <a href="#" class="uibutton" title="' . t(189, "Copy from") . '…" onclick=" navigate_items_tags_copy_from_language($(this).next().val(), \'' . $lang . '\'); return false; "> <img src="img/icons/silk/page_white_copy.png" width="16" height="16" align="absmiddle" style=" cursor: pointer; " /> </a> ' . $tags_copy_select . ' </div> '; } $tags_top_list = ' <div style=" position: relative; margin-left: 600px; margin-top: -93px; width: 200px; height: 92px; "> <a href="#" class="uibutton" onclick=" navigate_items_tags_ranking(\'' . $lang . '\', this); return false; "> <img src="img/icons/silk/award_star_gold_3.png" width="16" height="16" align="absmiddle" style=" cursor: pointer; " /> ' . t(613, "Most used") . ' </a> </div> '; $navibars->add_tab_content_row(array('<label>' . t(265, 'Tags') . '</label>', $naviforms->textfield('tags-' . $lang, @$item->dictionary[$lang]['tags']), $tags_top_list, $tags_copy_select)); } $layout->add_script(' $("#tags-' . $lang . '").tagit({ removeConfirmation: true, allowSpaces: true, singleField: true, singleFieldDelimiter: ",", placeholderText: "+", autocomplete: { delay: 0, minLength: 1, source: "?fid=items&act=json_tags_search&lang=' . $lang . '" }, afterTagAdded: function(event, ui) { var tags = $(this).tagit("assignedTags"); if(tags.length > 0) tags = tags.join(","); else tags = ""; $("#tags-' . $lang . '") .val(tags) .trigger("change"); }, afterTagRemoved: function(event, ui) { var tags = $(this).tagit("assignedTags"); if(tags.length > 0) tags = tags.join(","); else tags = ""; $("#tags-' . $lang . '") .val(tags) .trigger("change"); } }); $("#tags-' . $lang . '").next().sortable({ items: ">li:not(.tagit-new)", update: function(ui, event) { var tags = []; $("#tags-' . $lang . '").next().find("span.tagit-label").each(function() { if($(this).text() != "") tags.push($(this).text()); }); if(tags.length > 0) tags = tags.join(","); else tags = ""; $("#tags-' . $lang . '").val(tags); $("#tags-' . $lang . '").trigger("change"); } }); '); // script#4 $navibars->add_tab_content('</div>'); } // translate content_samples titles if (is_array($theme->content_samples)) { for ($i = 0; $i < count($theme->content_samples); $i++) { $theme->content_samples[$i]->title = $theme->t($theme->content_samples[$i]->title); } } $layout->add_script(' var template_sections = ' . json_encode($template->sections) . '; var theme_content_samples = ' . json_encode($theme->content_samples) . '; var website_theme = "' . $website->theme . '"; '); $category = new structure(); $category->paths = array(); if (!empty($item->category)) { $category->load($item->category); } $layout->add_script(' var item_category_path = ' . json_encode($category->paths) . '; var item_id = "' . $item->id . '"; '); // script#5 // select the first language of the website as the default origin when copying content $default_language = array_keys($ws_languages); $default_language = $default_language[0]; $layout->add_content(' <div id="navigate_items_copy_from" style=" display: none; "> <div class="navigate-form-row"> <label>' . t(191, 'Source') . '</label> ' . $naviforms->buttonset('navigate_items_copy_from_type', array('language' => t(46, 'Language'), 'item' => t(180, 'Item')), '0', "navigate_items_copy_from_change_origin(this);") . ' </div> <div class="navigate-form-row" style=" display: none; "> <label>' . t(46, 'Language') . '</label> ' . $naviforms->selectfield('navigate_items_copy_from_language_selector', array_keys($ws_languages), array_values($ws_languages), $default_language) . ' </div> <div class="navigate-form-row" style=" display: none; "> <label>' . t(79, 'Template') . '</label> ' . $naviforms->select_from_object_array('navigate_items_copy_from_template', $templates, 'id', 'title', '', '') . ' </div> <div class="navigate-form-row" style=" display: none; "> <label>' . t(67, 'Title') . '</label> ' . $naviforms->textfield('navigate_items_copy_from_title') . ' ' . $naviforms->hidden('navigate_items_copy_from_item_id', '') . ' </div> <div class="navigate-form-row" style=" display: none; "> <label>' . t(239, 'Section') . '</label> ' . $naviforms->select_from_object_array('navigate_items_copy_from_section', array(), 'id', 'name', '') . ' </div> </div> <div id="navigate_items_copy_from_history" style=" display: none; "> <div class="navigate-form-row"> <label>' . t(196, 'Date & time') . '</label> <select id="navigate_items_copy_from_history_options" name="navigate_items_copy_from_history_options" onchange="navigate_items_copy_from_history_preview(this.value, $(this).attr(\'type\'));"> </select> <a href="#" onclick="navigate_items_copy_from_history_remove();"><img src="img/icons/silk/cancel.png" align="absmiddle"></a> </div> <div class="navigate-form-row"> <!--<div id="navigate_items_copy_from_history_text" name="navigate_items_copy_from_history_text" style="border: 1px solid #CCCCCC; float: left; height: auto; min-height: 20px; overflow: auto; width: 97%; padding: 3px; background: #f7f7f7;"> </div> --> <textarea style="display: none;" id="navigate_items_copy_from_history_stylesheets">' . $website->content_stylesheets('link_tag') . '</textarea> <iframe id="navigate_items_copy_from_history_text" name="navigate_items_copy_from_history_text" src="about:blank" style="border: 1px solid #CCCCCC; float: left; height: 300px; min-height: 20px; overflow: auto; width: 97%; padding: 3px; "> </iframe> <div id="navigate_items_copy_from_history_text_raw" style=" display: none; "></div> </div> </div> <div id="navigate_items_copy_from_theme_samples" style=" display: none; "> <div class="navigate-form-row"> <label>' . t(79, 'Template') . '</label> <select id="navigate_items_copy_from_theme_samples_options" name="navigate_items_copy_from_theme_samples_options" onchange="navigate_items_copy_from_theme_samples_preview(this.value, $(this).attr(\'type\'), $(this).find(\'option:selected\').attr(\'source\'));"> </select> </div> <div class="navigate-form-row"> <div id="navigate_items_copy_from_theme_samples_text" name="navigate_items_copy_from_theme_samples_text" style="border: 1px solid #CCCCCC; float: left; height: auto; min-height: 20px; overflow: auto; width: 97%; padding: 3px; background: #f7f7f7;"> </div> <div id="navigate_items_copy_from_theme_samples_text_raw" style=" display: none; "></div> </div> </div> '); // script will be bound to onload event at the end of this php function (after getScript is done) $onload_language = $_REQUEST['tab_language']; if (empty($onload_language)) { $onload_language = $website->languages_list[0]; } $layout->add_script(' function navigate_items_onload() { navigate_items_select_language("' . $onload_language . '"); navigate_change_association("' . (empty($item->id) ? 'category' : $item->association) . '"); setTimeout(function() { $(navigate_codemirror_instances).each(function() { this.refresh(); } ); }, 500); }; '); /* IMAGE GALLERIES */ if ($template->gallery === 'true' || $template->gallery > 0) { $navibars->add_tab(t(210, "Gallery")); // tab #3 $access = array(0 => '', 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 => '', 1 => '<img src="img/icons/silk/world_dawn.png" align="absmiddle" title="' . t(70, 'Private') . '" />', 2 => '<img src="img/icons/silk/world_night.png" align="absmiddle" title="' . t(81, 'Hidden') . '" />'); if (!is_array($item->galleries[0])) { $item->galleries[0] = array(); } $gallery_elements_order = implode('#', array_keys($item->galleries[0])); $navibars->add_tab_content($naviforms->hidden('items-gallery-elements-order', $gallery_elements_order)); $gallery = '<ul id="items-gallery-elements" class="items-gallery">'; $ids = array_keys($item->galleries[0]); //$default_img = 'data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='; // transparent pixel $default_img = 'img/icons/ricebowl/mimetypes/image.png'; for ($g = 0; $g < count($ids); $g++) { $f = new file(); $f->load($ids[$g]); $gallery .= ' <li> <div id="items-gallery-item-' . $ids[$g] . '-droppable" class="navigate-droppable ui-corner-all" data-file-id="' . $f->id . '"> <div class="file-access-icons">' . $access[$f->access] . $permissions[$f->permission] . '</div> <img title="' . $ids[$g] . '" src="' . $default_img . '" data-src="' . NAVIGATE_DOWNLOAD . '?wid=' . $website->id . '&id=' . $ids[$g] . '&disposition=inline&width=75&height=75" width="75" height="75" /> </div> <div class="navigate-droppable-cancel" style="display: block;"><img src="img/icons/silk/cancel.png" /></div> </li> '; } // empty element $gallery .= ' <li class="gallery-item-empty-droppable"> <div id="items-gallery-item-empty-droppable" class="navigate-droppable ui-corner-all"> <img src="img/icons/misc/dropbox.png" vspace="18" /> </div> </li> '; $gallery .= '</ul>'; // now the image captions foreach ($item->galleries[0] as $image_id => $image_dictionary) { if (!is_array($image_dictionary)) { $image_dictionary = array(); } foreach ($website->languages_list as $lang) { $gallery .= $naviforms->hidden('items-gallery-item-' . $image_id . '-dictionary-' . $lang, $image_dictionary[$lang]); } } $navibars->add_tab_content_row(array('<label>' . t(210, 'Gallery') . '</label>', '<div>' . $gallery . '</div>')); $layout->add_content(' <ul id="contextmenu-gallery-items" style="display: none" class="ui-corner-all"> <li id="contextmenu-gallery-items-properties"><a href="#"><span class="ui-icon ui-icon-contact"></span>' . t(213, "Image caption") . '</a></li> <li id="contextmenu-gallery-items-permissions"><a href="#"><span class="ui-icon ui-icon-key"></span>' . t(17, "Permissions") . '</a></li> <li id="contextmenu-gallery-items-focalpoint"><a href="#"><span class="ui-icon ui-icon-image"></span>' . t(540, "Focal point") . '</a></li> <li id="contextmenu-gallery-items-description"><a href="#"><span class="ui-icon ui-icon-comment"></span>' . t(334, 'Description') . '</a></li> <li><!--divider--></li> <li id="contextmenu-gallery-items-remove"><a href="#"><span class="ui-icon ui-icon-minus"></span>' . t(627, 'Remove') . '</a></li> <li id="contextmenu-gallery-items-move-beginning"><a href="#"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span>' . t(628, 'Move to the beginning') . '</a></li> <li id="contextmenu-gallery-items-move-end"><a href="#"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span>' . t(629, 'Move to the end') . '</a></li> </ul> '); // script#6 $layout->add_script(' $(window).on("load", function() { new LazyLoad({ threshold: 200, container: $("#items-gallery-elements-order").parent()[0], elements_selector: "#items-gallery-elements img", throttle: 40, data_src: "src", show_while_loading: true }); }); '); $captions_form = ' <div id="navigate_items_gallery_captions_form" style=" display: none; "> <div class="navigate-form-row"> <label>' . t(157, 'Image') . '</label> ' . $naviforms->dropbox('navigate_items_gallery_captions_form_image', '', 'image', true) . ' </div> '; $caption_langs = array_values($website->languages_list); foreach ($caption_langs as $caption_language) { $captions_form .= ' <div class="navigate-form-row"> <label>' . language::name_by_code($caption_language) . '</label> ' . $naviforms->textfield('navigate_items_gallery_captions_form_image_' . $caption_language, '') . ' </div> '; } $captions_form .= ' </div> '; $layout->add_content($captions_form); } // Properties TAB (only if needed) $properties_html = ''; if ($item->association == 'free' && !empty($item->template) && $item->template != '0') { // we already know the properties to show: template is set on item $properties_html = navigate_property_layout_form('item', $item->template, 'item', $item->id); } else { if ($item->association == 'category' && $item->embedding == 0 && !empty($item->template)) { // we already know the properties to show: template is set on item $properties_html = navigate_property_layout_form('item', $item->template, 'item', $item->id); } else { if ($item->association == 'category' && $item->category > 0) { // we have to get the template set in the category of the item $template_id = $DB->query_single('template', 'nv_structure', ' id = ' . protect($item->category) . ' AND website = ' . $website->id); $properties_html = navigate_property_layout_form('item', $template_id, 'item', $item->id); } } } if (!empty($properties_html)) { $navibars->add_tab(t(77, "Properties")); // tab #4 $navibars->add_tab_content($properties_html); } if ($template->comments > 0 || $template->comments == 'true' || $template->comments === true || is_object($template->comments)) { $navibars->add_tab(t(250, "Comments")); // tab #5 $navibars->add_tab_content_row(array('<label>' . t(252, 'Comments enabled to') . '</label>', $naviforms->selectfield('item-comments_enabled_to', array(0 => 0, 1 => 1, 2 => 2), array(0 => t(253, 'Nobody'), 1 => t(24, 'Registered users'), 2 => t(254, 'Everyone')), $item->comments_enabled_to))); $moderator_id = ''; if (!empty($item->comments_moderator)) { $moderator_username = $DB->query_single('username', 'nv_users', ' id = ' . $item->comments_moderator); if (!empty($moderator_username)) { $moderator_username = array($moderator_username); $moderator_id = array($item->comments_moderator); } } $navibars->add_tab_content_row(array('<label>' . t(255, 'Moderator') . '</label>', $naviforms->selectfield('item-comments_moderator', $moderator_id, $moderator_username, $item->comments_moderator, null, false, null, null, false), '<span style="display: none;" id="item-comments_moderator-helper">' . t(535, "Find user by name") . '</span>', '<div class="subcomment"><img align="absmiddle" src="' . NAVIGATE_URL . '/img/icons/silk/information.png" /> ' . t(256, 'Leave blank to accept all comments') . '</div>')); // script#7 // comments list // removed filter: AND nvwu.website = nvc.website ... reason: the webuser could be from another website if sharing webusers is enabled // TODO: retrieve comments by AJAX call to avoid memory issues. right now we just retrieve the first 500 comments $DB->query('SELECT nvc.*, nvwu.username, nvwu.avatar FROM nv_comments nvc LEFT OUTER JOIN nv_webusers nvwu ON nvwu.id = nvc.user WHERE nvc.website = ' . protect($website->id) . ' AND nvc.item = ' . protect($item->id) . ' ORDER BY nvc.date_created ASC LIMIT 500'); $comments = $DB->result(); $comments_total = count($comments); for ($c = 0; $c < $comments_total; $c++) { if ($comments[$c]->status == 2) { $comment_status = 'hidden'; } else { if ($comments[$c]->status == 1) { $comment_status = 'private'; } else { if ($comments[$c]->status == -1) { $comment_status = 'new'; } else { $comment_status = 'public'; } } } $navibars->add_tab_content_row(array('<span class="items-comment-label">' . core_ts2date($comments[$c]->date_created, true) . '<br />' . '<strong>' . (empty($comments[$c]->username) ? $comments[$c]->name : $comments[$c]->username) . '</strong>' . '<br />' . $comments[$c]->ip . '</span>', '<div id="items-comment-' . $comments[$c]->id . '" class="items-comment-message items-comment-status-' . $comment_status . '">' . nl2br($comments[$c]->message) . '</div>', empty($comments[$c]->avatar) ? '' : '<img style=" margin-left: 5px; " src="' . NAVIGATE_DOWNLOAD . '?wid=' . $website->id . '&id=' . $comments[$c]->avatar . '&disposition=inline&width=46&height=46" />')); } $navibars->add_tab_content(' <div id="items-comments-toolbar"> <img id="items-comments-toolbar-publish" src="' . NAVIGATE_URL . '/img/icons/silk/accept.png" title="' . t(258, 'Publish') . '" /> <img id="items-comments-toolbar-unpublish" src="' . NAVIGATE_URL . '/img/icons/silk/delete.png" title="' . t(259, 'Unpublish') . '" /> <img id="items-comments-toolbar-delete" src="' . NAVIGATE_URL . '/img/icons/silk/decline.png" title="' . t(35, 'Delete') . '" /> </div> '); // script#8 // comments moderation } if ($item->votes > 0) { $navibars->add_tab(t(352, "Votes")); // tab #6 $score = $item->score / $item->votes; $navibars->add_tab_content_panel('<img src="img/icons/silk/chart_pie.png" align="absmiddle" /> ' . t(337, 'Summary'), array('<div class="navigate-panels-summary ui-corner-all"><h2>' . $item->votes . '</h2><br />' . t(352, 'Votes') . '</div>', '<div class="navigate-panels-summary ui-corner-all""><h2>' . $score . '</h2><br />' . t(353, 'Score') . '</div>', '<div style=" float: left; margin-left: 8px; "><a href="#" class="uibutton" id="items_votes_webuser">' . t(15, 'Users') . '</a></div>', '<div style=" float: right; margin-right: 8px; "><a href="#" class="uibutton" id="items_votes_reset">' . t(354, 'Reset') . '</a></div>', '<div id="items_votes_webuser_window" style=" display: none; width: 600px; height: 350px; "></div>'), 'navigate-panel-web-summary', '385px', '200px'); $layout->add_script(' $("#items_votes_reset").on("click", function() { navigate_confirmation_dialog( function() { $.post("?fid=items&act=votes_reset&id=' . $item->id . '", function(data) { $("#navigate-panel-web-summary").addClass("ui-state-disabled"); navigate_notification("' . t(355, 'Votes reset') . '"); }); }, "' . t(497, "Do you really want to erase this data?") . '", null, "' . t(354, 'Reset') . '" ); }); $("#items_votes_webuser").on("click", function() { $( "#items_votes_webuser_window" ).dialog( { title: "' . t(357, 'User votes') . '", width: 700, height: 400, modal: true, open: function() { $( "#items_votes_webuser_window" ).html("<table id=\\"items_votes_webuser_grid\\"></table>"); $( "#items_votes_webuser_window" ).append("<div id=\\"items_votes_webuser_grid_pager\\"></div>"); jQuery("#items_votes_webuser_grid").jqGrid( { url: "?fid=' . $_REQUEST['fid'] . '&act=votes_by_webuser&id=' . $item->id . '", editurl: "?fid=' . $_REQUEST['fid'] . '&act=votes_by_webuser&id=' . $item->id . '", datatype: "json", mtype: "GET", pager: "#items_votes_webuser_grid_pager", colNames:["ID", "' . t(86, 'Date') . '", "' . t(1, 'Username') . '"], colModel:[ {name:"id", index:"id", width: 75, align: "left", sortable:true, editable:false, hidden: true}, {name:"date",index:"date", width: 180, align: "center", sortable:true, editable:false}, {name:"username", index:"username", align: "left", width: 380, sortable:true, editable:false} ], scroll: 1, loadonce: false, autowidth: true, forceFit: true, rowNum: 12, rowList: [12], viewrecords: true, multiselect: true, sortname: "date", sortorder: "desc" }); $("#items_votes_webuser_grid").jqGrid( "navGrid", "#items_votes_webuser_grid_pager", { add: false, edit: false, del: true, search: false } ); } }); }); '); $navibars->add_tab_content_panel('<img src="img/icons/silk/chart_line.png" align="absmiddle" /> ' . t(353, 'Score'), array('<div id="navigate-panel-web-score-graph" style=" margin: 8px; height: 150px; width: 360px; "></div>'), 'navigate-panel-web-score', '385px', '200px'); $votes_by_score = webuser_vote::object_votes_by_score('item', $item->id); $gdata = array(); $colors = array('#0a2f42', '#62bbe8', '#1d8ec7', '#44aee4', '#bbe1f5'); foreach ($votes_by_score as $vscore) { $gdata[] = (object) array('label' => $vscore->value, 'data' => (int) $vscore->votes, 'color' => $colors[$vscore->value % count($colors)]); } $navibars->add_tab_content(' <div class="hidden" id="navigate-panel-web-data-score">' . json_encode($gdata) . '</div> '); $navibars->add_tab_content_panel('<img src="img/icons/silk/chart_line.png" align="absmiddle" /> ' . t(352, 'Votes') . ' (' . t(356, 'last 90 days') . ')', array('<div id="navigate-panel-web-votes-graph" style=" margin: 8px; height: 150px; width: 360px; "></div>'), 'navigate-panel-web-votes', '385px', '200px'); $votes_by_date = webuser_vote::object_votes_by_date('item', $item->id, 90); $navibars->add_tab_content(' <div class="hidden" id="navigate-panel-web-data-votes_by_date">' . json_encode($votes_by_date) . '</div> '); // script#9 } $nvweb_preview = NAVIGATE_PARENT . NAVIGATE_FOLDER . '/web/nvweb.php?preview=true&wid=' . $website->id . '&route='; $layout->add_script(' function navigate_items_preview() { // navigate_items_disable_spellcheck(); not needed in tinymce 4? navigate_periodic_event_delegate(); // force saving current data in history var url = "' . $nvweb_preview . '"; var active_language = $("input[name=\'language_selector[]\']:checked").val(); if($("#template").parent().css("display")=="block") url = url + "node/' . $item->id . '&lang=" + active_language + "&template=" + $("#template").val(); else // category URL url = url + item_category_path[active_language].slice(1); setTimeout(function() { window.open(url); }, 1000); } '); $events->trigger('items', 'edit', array('item' => &$item, 'navibars' => &$navibars, 'naviforms' => &$naviforms)); } $layout->add_script(' $.getScript("lib/packages/items/items.js?r=' . $current_version->revision . '", function() { if(typeof navigate_items_onload == "function") navigate_items_onload(); }); '); return $navibars->generate(); }
if (!$site->user->allowed_adminpage(array('adminpage_id' => 86,)) ) { # adminpage_id=86 => "System > Extensions" ############ debug if($site->user) { $site->user->debug->print_msg(); } # user debug if($site->guest) { $site->guest->debug->print_msg(); } # guest debug $site->debug->print_msg(); exit; } $op = $site->fdat['op']; $op2 = $site->fdat['op2']; ######## create EXTENSION $extension = new extension(array( name => $site->fdat['name'] )); #printr($extension->all); ###################### # leida valitud keele p�hjal �ige lehe encoding, # admin-osa keel j��b samaks $keel_id = isset($site->fdat['flt_keel']) ? $site->fdat['flt_keel'] : $site->fdat['keel_id']; if (!strlen($keel_id)) { $keel_id = $site->keel; } ############################### # DEPRECATED: extension: Save extension name & close /* if($site->fdat['op2'] == 'save_extension' || $site->fdat['op2'] == 'saveclose_extension') {
$sql .= "where dialplan_detail_uuid = '" . $dialplan_detail_uuid . "' "; $sql .= "and domain_uuid = '" . $domain_uuid . "' "; $db->exec(check_sql($sql)); unset($sql); } unset($sql, $prep_statement, $result); } // update session domain name $_SESSION['domains'][$domain_uuid]['domain_name'] = $domain_name; // recreate dialplan and extension xml files if (is_readable($_SESSION['switch']['dialplan']['dir'])) { save_dialplan_xml(); } if (is_readable($_SESSION['switch']['extensions']['dir'])) { require_once $_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/app/extensions/resources/classes/extension.php"; $extension = new extension(); $extension->xml(); } // if single-tenant and variables exist, update variables > domain value to match new domain if (count($_SESSION['domains']) == 1 && file_exists($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/app/vars/")) { $sql = "update v_vars set "; $sql .= "var_value = '" . $domain_name . "' "; $sql .= "where var_name = 'domain' "; $db->exec(check_sql($sql)); unset($sql); } } } //upgrade the domains if (permission_exists('upgrade_apps') || if_group("superadmin")) { require_once "core/upgrade/upgrade_domains.php";
function save_switch_xml() { if (is_readable($_SESSION['switch']['dialplan']['dir'])) { save_dialplan_xml(); } if (is_readable($_SESSION['switch']['extensions']['dir'])) { if (file_exists($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/app/extensions/resources/classes/extension.php")) { require_once $_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "app/extensions/resources/classes/extension.php"; $extension = new extension(); $extension->xml(); } } if (is_readable($_SESSION['switch']['conf']['dir'])) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . PROJECT_PATH . "/app/settings/app_config.php")) { save_setting_xml(); } if (file_exists($_SERVER['DOCUMENT_ROOT'] . PROJECT_PATH . "/app/modules/app_config.php")) { save_module_xml(); } if (file_exists($_SERVER['DOCUMENT_ROOT'] . PROJECT_PATH . "/app/vars/app_config.php")) { save_var_xml(); } if (file_exists($_SERVER['DOCUMENT_ROOT'] . PROJECT_PATH . "/app/call_center/app_config.php")) { save_call_center_xml(); } if (file_exists($_SERVER['DOCUMENT_ROOT'] . PROJECT_PATH . "/app/gateways/app_config.php")) { save_gateway_xml(); } //if (file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/app/ivr_menu/app_config.php")) { // save_ivr_menu_xml(); //} if (file_exists($_SERVER['DOCUMENT_ROOT'] . PROJECT_PATH . "/app/sip_profiles/app_config.php")) { save_sip_profile_xml(); } } }
' . lang::get('idea_text') . ' <hr /> </div> <div class="col-md-9"> <textarea class="form-control"></textarea> </div> <div class="col-md-3"> <p><button class="btn btn-default">' . lang::get('send') . '</button></p> <div id="ajax-content"></div> </div> </div> ', ['id' => 'idea', 'col' => 'lg-6']); ?> </div> <div class="expand"> <i class="fa fa-chevron-up"></i> </div> </section> <div class="row"> <?php $button = '<a href="http://dynao.de" target="_blank" class="btn btn-sm btn-default">' . lang::get('all_addons') . '</a>'; echo bootstrap::panel(lang::get('addons'), [$button], dyn::getAddons(), ['table' => true, 'col' => 'lg-6']); $button = '<a href="http://dynao.de" target="_blank" class="btn btn-sm btn-default">' . lang::get('all_modules') . '</a>'; echo bootstrap::panel(lang::get('modules'), [$button], dyn::getModules(), ['table' => true, 'col' => 'lg-6']); ?> </div> <?php echo extension::get('DASHBOARD_OVERVIEW', '');
userPerm::add('media[category][delete]', lang::get('media[category][delete]')); if (dyn::get('user')->hasPerm('media[edit]') || dyn::get('user')->hasPerm('media[delete]') || dyn::get('user')->hasPerm('media[category][edit]') || dyn::get('user')->hasPerm('media[category][delete]')) { backend::addNavi(lang::get('media'), url::backend('media'), 'picture-o', 2, function () { return dir::addon('mediamanager', 'page' . DIRECTORY_SEPARATOR . 'media.php'); }); } form::addClassMethod('addMediaField', function ($name, $value) { return $this->addField($name, $value, 'formMedia'); }); form::addClassMethod('addMediaListField', function ($name, $value) { return $this->addField($name, $value, 'formMediaList'); }); $page = type::super('page', 'string'); $subpage = type::super('subpage', 'string'); $action = type::super('action', 'string'); pageArea::addType('varsMedia'); pageArea::addType('varsMedialist'); if (addonConfig::isActive('metainfos')) { metainfosPage::addType('DYN_MEDIA'); metainfosPage::addType('DYN_MEDIA_LIST'); if ($page == 'meta') { backend::addSubNavi(lang::get('media'), url::backend('meta', ['subpage' => 'media']), 'circle', -1, function () { return dir::addon('mediamanager', 'page' . DIRECTORY_SEPARATOR . 'meta.media.php'); }); } if ($page == 'media' && $subpage == 'files' && in_array($action, ['add', 'edit'])) { extension::add('FORM_BEFORE_ACTION', function ($form) { $form = metainfos::getMetaInfos($form, 'media'); }); } }
function extensions_dialog($extension, $function, $params) { global $layout; $layout = null; $layout = new layout('navigate'); // load the extension source code, if not already done extension::include_php($extension->code); if (function_exists($function)) { call_user_func($function, $params); $out = $layout->generate(); } else { $out = 'ERROR: "' . $function . '" function does not exist!'; } return $out; }
function ext_saynumber($data, $gender = 'f') { parent::extension($data); $this->gender = $gender; }
public static function blocks() { $out = array(); $list = extension::list_installed(); for ($e = 0; $e < count($list); $e++) { if (isset($list[$e]['blocks'])) { for ($eb = 0; $eb < count($list[$e]['blocks']); $eb++) { $list[$e]['blocks'][$eb]->_extension = $list[$e]['code']; $out[] = $list[$e]['blocks'][$eb]; } } } return $out; }
function webdictionary_edit_language_form($code) { global $DB; global $website; global $theme; global $events; $navibars = new navibars(); $naviforms = new naviforms(); $navibars->title(t(21, 'Dictionary') . ' / ' . t(602, 'Edit language')); $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->add_actions(array('<a href="?fid=webdictionary&act=0"><img height="16" align="absmiddle" width="16" src="img/icons/silk/application_view_list.png"> ' . t(39, 'List') . '</a>')); $navibars->form(); $navibars->add_tab(t(188, "Translate")); $navibars->add_tab_content($naviforms->hidden('form-sent', 'true')); $origin = ""; foreach ($website->languages_list as $l) { if ($l == $code) { continue; } else { $origin = $l; break; } } // retrieve original theme translations, if any $theme->get_translations(); $dict_dest = array(); foreach ($theme->dictionaries as $otext) { if ($otext['lang'] == $code) { $dict_dest[$otext['node_id']] = $otext['text']; } } // retrieve existing database dictionary translations $DB->query(' SELECT * FROM nv_webdictionary WHERE ( (node_type = "global") OR (node_type = "theme" AND theme= "' . $theme->name . '") ) AND website = ' . $website->id . ' '); $db_trans = $DB->result(); foreach ($db_trans as $otext) { $text_id = $otext->node_id; if ($otext->node_type == "theme") { $text_id = $otext->subtype; } if ($otext->lang == $code) { $dict_dest[$text_id] = $otext->text; } else { if ($otext->lang == $origin && $otext->node_type == "global") { array_push($theme->dictionaries, array("source" => $text_id, "node_id" => $text_id, "text" => $otext->text, "lang" => $otext->lang)); } } } $extensions_translations = array(); $extensions = extension::list_installed(); if (!is_array($extensions)) { $extensions = array(); } foreach ($extensions as $extension) { $ext = new extension(); $ext->load($extension['code']); $extension_translations = $ext->get_translations(); // load all translations of the extension $extensions_translations = array_merge($extensions_translations, $extension_translations); } $DB->query(' SELECT * FROM nv_webdictionary WHERE node_type = "extension" AND website = ' . $website->id, 'array'); $resultset = $DB->result(); for ($dbrs = 0; $dbrs < count($resultset); $dbrs++) { $found = false; for ($trs = 0; $trs < count($extensions_translations); $trs++) { if ($resultset[$dbrs]['node_type'] == "extension" && $resultset[$dbrs]['extension'] == $extensions_translations[$trs]['extension'] && $resultset[$dbrs]['subtype'] == $extensions_translations[$trs]['node_id'] && $resultset[$dbrs]['lang'] == $extensions_translations[$trs]['lang']) { $found = true; $extensions_translations[$trs]['text'] = $resultset[$dbrs]['text']; } } // translation was not included in the extension languages, so we need to add it to our array if (!$found) { $extensions_translations[] = array('extension' => $resultset[$dbrs]['extension'], 'source' => 'extension.' . $resultset[$dbrs]['extension'] . '.' . $resultset[$dbrs]['subtype'], 'node_id' => $resultset[$dbrs]['subtype'], 'lang' => $resultset[$dbrs]['lang'], 'text' => $resultset[$dbrs]['text']); } } // generate table $table = '<table class="box-table">'; $table .= '<tr><th>' . t(237, "Code") . '</th><th>' . language::name_by_code($origin) . '</th><th>' . language::name_by_code($code) . '</th></tr>'; foreach ($theme->dictionaries as $otext) { if ($otext['lang'] == $origin) { $translation = $dict_dest[$otext['node_id']]; if (is_numeric($otext['source'])) { $otext['source'] = 'global.' . $otext['source']; } // note: PHP does not allow using dots in $_POST variable names, unless they are used in an array $table .= ' <tr> <td>' . $otext['node_id'] . '</textarea></td> <td><textarea rows="2" cols="60" disabled="disabled">' . $otext['text'] . '</textarea></td> <td><textarea name="data[' . $code . '.' . $otext['source'] . ']" rows="2" cols="60">' . $translation . '</textarea></td> </tr> '; } } foreach ($extensions_translations as $otext) { if ($otext['lang'] == $origin) { $translation = ""; foreach ($extensions_translations as $dtext) { if ($otext['source'] == $dtext['source'] && $dtext['lang'] == $code) { $translation = $dtext['text']; } } $table .= ' <tr> <td>' . $otext['source'] . '</textarea></td> <td><textarea rows="2" cols="60" disabled="disabled">' . $otext['text'] . '</textarea></td> <td><textarea name="data[' . $code . '.' . $otext['source'] . ']" rows="2" cols="60">' . $translation . '</textarea></td> </tr> '; } } $table .= '</table>'; $navibars->add_tab_content($table); return $navibars->generate(); }
$subpage = type::super('subpage', 'string'); $action = type::super('action', 'string'); $structure_id = type::super('structure_id', 'int', 0); $id = type::super('id', 'int', 0); // Falls was an der Page geändert worden ist if ($page == 'structure' && $subpage == 'pages' && in_array($action, ['add', 'edit', 'seo']) && !$structure_id) { extension::add('FORM_AFTER_SAVE', function ($form) { seo_rewrite::generatePathlist(); return $form; }); } // Wenn SEO Button geklickt worden ist if ($page == 'structure' && $subpage == 'pages' && $action == 'seo') { seoPage::generateForm($id); layout::addJsCode("\n\t\tvar default_url = \$('#seo-costum-url').text();\n\t\t\n\t\t\$('#seo-costum-url-text').keyup(function() {\n\t\t\tvar val = \$(this).val();\n\t\t\t\n\t\t\tif(val == '')\n\t\t\t\tval = default_url;\n\t\t\t\t\t\t\t\n\t\t\t\$('#seo-costum-url').text(val);\n\t\t});\n\t\t\n\t\tvar default_title = \$('#seo-default-title').text();\n\t\t\$('#seo-title-text').keyup(function() {\n\t\t\tvar val = \$(this).val();\n\t\t\t\n\t\t\tif(val == '')\n\t\t\t\tval = default_title;\n\t\t\t\n\t\t\t\$('#seo-title').text(val);\n\t\t});\n\t\t"); } // Wenn Sortiert worden ist if ($page == 'structure' && $subpage == 'pages' && (ajax::is() || $action == 'delete' && !$structure_id)) { extension::add('BACKEND_OUTPUT', function ($output) { seo_rewrite::generatePathlist(); return $output; }); } // Inhaltsseite der page if ($page == 'structure' && $subpage == 'pages' && ($structure_id || $action == 'edit' && $id)) { $id = $structure_id ? $structure_id : $id; extension::add('BACKEND_OUTPUT', function ($output) use($id) { return seoPage::generateButton($output, $id); }); } }