/** * show registration or login page * * @param object $PAGEDATA the page object * * @return HTML of the page */ function IssueTracker_front($PAGEDATA) { require SCRIPTBASE . 'ww.plugins/issue-tracker/frontend/page_type.php'; global $unused_uri; if (isset($unused_uri) && $unused_uri) { redirect($PAGEDATA->getRelativeURL() . '#' . preg_replace('/\\/$/', '', $unused_uri)); } if (isset($_SESSION['userdata'])) { WW_addCSS('/j/jquery.multiselect/jquery.multiselect.css'); WW_addScript('/j/jquery.multiselect/jquery.multiselect.min.js'); } return $PAGEDATA->render() . $html . __FromJson(@$PAGEDATA->vars['footer']); }
function showCategoriesRecursive($pid, $level, $sid) { $opts = array(); $cs = dbAll('select id,name from products_categories where parent_id=' . $pid . ' order by name', false, 'products_categories'); foreach ($cs as $c) { $opt = '<option value="' . $c['id'] . '"'; if ($c['id'] == $sid) { $opt .= ' selected="selected"'; } $opt .= '>' . str_repeat('» ', $level) . htmlspecialchars(__FromJson($c['name'])) . '</option>'; $opts[] = $opt; $opts[] = showCategoriesRecursive($c['id'], $level + 1, $sid); } return join('', $opts); }
/** * retrieve message for when someone tries to add an expired item to cart * * @return string message */ function OnlineStore_getExpiryNotification() { $id = (int) $_REQUEST['id']; $p = dbRow('select * from products where id=' . $id); $product = Product::getInstance($id, $p, true); $typeid = $p['product_type_id']; $nfile = USERBASE . '/ww.cache/products/templates/expiry_notification_' . $typeid; if (!file_exists($nfile)) { $t = dbRow('select template_expired_notification from products_types where id=' . $typeid); $template = strlen($t['template_expired_notification']) > 4 ? $t['template_expired_notification'] : '' . __('This product has expired. You cannot add it to the cart.') . ''; file_put_contents($nfile, $template); } require_once SCRIPTBASE . '/ww.incs/common.php'; $smarty = Products_setupSmarty(); $smarty->assign('product', $product); $smarty->assign('product_id', $product->get('id')); $smarty->assign('_name', __FromJson($product->name)); $smarty->assign('_stock_number', $product->stock_number); return $smarty->fetch($nfile); }
if (strpos($img, '<img') === 0) { $img = preg_replace('/>.*/', '', $img); $img = preg_replace('/.*src="([^"]*)".*/', '\\1', $img); $img = preg_replace('#^/f/#', '', $img); $thumb = '<img src="/a/f=getImg/w=' . $vars->thumbnailw . '/h=' . $vars->thumbnailh . '/' . $img . '" style="float:left;"/>'; } } $body = ''; if ($vars->characters_shown) { $body = preg_replace('#<h1[^<]*</h1>#', '', $pagerendered); $body = str_replace(array("\n", "\r"), ' ', $body); $body = preg_replace('/<script defer="defer"[^>]*>.*?<\\/script>/', '', $body); $body = preg_replace('/<[^>]*>/', '', $body); $body = '<br /><i>' . substr($body, 0, $vars->characters_shown) . '...</i>'; } $links[] = '<a href="' . $page->getRelativeURL() . '"><strong>' . htmlspecialchars(__FromJson($page->name)) . '</strong><div class="date">' . Core_dateM2H($page->associated_date) . '</div><span class="news-body">' . $thumb . $body . '</span></a>'; } $html .= '<div id="news-wrapper-' . $vars->id . '" class="news_excerpts_wrapper"><ul class="news_excerpts"><li>' . join('</li><li>', $links) . '</li></ul></div>'; if (isset($vars->scrolling) && $vars->scrolling) { $n_items = isset($vars->stories_to_show) && is_numeric($vars->stories_to_show) ? $vars->stories_to_show : 2; if (isset($vars->scrolling) && $vars->scrolling) { WW_addScript('/j/jquery.vticker.js'); WW_addCSS('/ww.plugins/news/c/scroller.css'); $html .= '<script defer="defer">$(function(){ $("#news-wrapper-' . $vars->id . '").vTicker({ speed: 15000, pause: 5000, showItems: ' . $n_items . ', animation: "", mousePause: true });
/** * get recursive details of pages to build a menu * * @param int $parentid the parent's ID * @param int $depth current menu depth * @param array $options any further options * * @return string HTML of the sub-menu */ function menuBuildFg($parentid, $depth, $options) { $PARENTDATA = Page::getInstance($parentid)->initValues(); // { menu order $order = 'ord,name'; if (isset($PARENTDATA->vars['order_of_sub_pages'])) { switch ($PARENTDATA->vars['order_of_sub_pages']) { case 1: // { alphabetical $order = 'name'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } break; // } // } case 2: // { associated_date $order = 'associated_date'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } $order .= ',name'; break; // } // } default: // { by admin order $order = 'ord'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } $order .= ',name'; break; // } } } // } $sql = "select id,name,type from pages where parent='" . $parentid . "' and !(special&2) order by {$order}"; $md5 = md5($sql); $rs = Core_cacheLoad('pages', $md5, -1); if ($rs === -1) { $rs = dbAll($sql); Core_cacheSave('pages', $md5, $rs); } if ($rs === false || !count($rs)) { return ''; } $items = array(); foreach ($rs as $r) { $item = '<li>'; $page = Page::getInstance($r['id'])->initValues(); $item .= '<a class="menu-fg menu-pid-' . $r['id'] . '" href="' . $page->getRelativeUrl() . '">' . htmlspecialchars(__FromJson($page->name)) . '</a>'; // { override menu if a trigger causes the override $submenus = Core_trigger('menu-subpages-html', array($page, $depth + 1, $options)); if ($submenus) { $item .= $submenus; } else { $item .= menuBuildFg($r['id'], $depth + 1, $options); } // } $item .= '</li>'; $items[] = $item; } $options['columns'] = (int) $options['columns']; // { return top-level menu if (!$depth) { return '<ul>' . join('', $items) . '</ul>'; } // } $s = ''; if ($options['style_from'] == '1') { if ($options['background']) { $s .= 'background:' . $options['background'] . ';'; } if ($options['opacity']) { $s .= 'opacity:' . $options['opacity'] . ';'; } if ($s) { $s = ' style="' . $s . '"'; } } // { return 1-column sub-menu if ($options['columns'] < 2) { return '<ul' . $s . '>' . join('', $items) . '</ul>'; } // } // { return multi-column submenu $items_count = count($items); $items_per_column = ceil($items_count / $options['columns']); $c = '<table' . $s . '><tr><td><ul>'; for ($i = 1; $i < $items_count + 1; ++$i) { $c .= $items[$i - 1]; if ($i != $items_count && !($i % $items_per_column)) { $c .= '</ul></td><td><ul>'; } } $c .= '</ul></td></tr></table>'; return $c; // } }
} elseif (file_exists(THEME_DIR . '/' . THEME . '/h/_default.html')) { $template = THEME_DIR . '/' . THEME . '/h/_default.html'; } else { require_once dirname(__FILE__) . '/ww.incs/template-find.php'; } // } // { set up smarty $smarty = Core_smartySetup(USERBASE . '/ww.cache/pages'); $smarty->template_dir = THEME_DIR . '/' . THEME . '/h/'; $smarty->assign('PAGECONTENT', '<div id="ww-pagecontent">' . $pagecontent . '</div>'); $smarty->assign('PAGEDATA', $PAGEDATA); $smarty->assign('THEMEDIR', '/ww.skins/' . THEME); // } // { build metadata // { page title $c = '<title>' . htmlspecialchars($PAGEDATA->title ? $PAGEDATA->title : str_replace('www.', '', $_SERVER['HTTP_HOST']) . ' > ' . __FromJson($PAGEDATA->name)) . '</title>'; // } // { show stylesheet and javascript links $c .= 'WW_CSS_GOES_HERE' . Core_getJQueryScripts() . '<script src="WW_SCRIPTS_GO_HERE"></script>'; // { generate inline javascript $tmp = 'var pagedata={id:' . $PAGEDATA->id . Core_trigger('displaying-pagedata') . ',ptop:' . $PAGEDATA->getTopParentId() . (isset($DBVARS['cdn']) && $DBVARS['cdn'] ? ', cdn:"' . $DBVARS['cdn'] . '"' : '') . ',sessid:"' . session_id() . '"' . ',lang:"' . @$_SESSION['language'] . '"' . '},' . 'CKEDITOR_BASEPATH="//cdn.ckeditor.com/4.4.3/standard/", ' . (isset($_SESSION['userdata']['id']) ? User::getAsScript() : 'userdata={isAdmin:0' . (isset($_SESSION['wasAdmin']) ? ',wasAdmin:1' : '') . '};'); array_unshift($scripts_inline, $tmp); // } if (Core_isAdmin()) { foreach ($GLOBALS['PLUGINS'] as $p) { if (isset($p['frontend']['admin-script'])) { WW_addScript($p['frontend']['admin-script']); } } } // }
$c .= '<tr product="' . $md5 . '" class="os_item_numbers ' . $md5 . '">'; // { item name and details $c .= '<td class="products-itemname">'; if (isset($item['id']) && $item['id']) { $p = Product::getInstance($item['id']); if ($p) { $img = $p->getDefaultImage(); if ($img) { $c .= '<a href="/f/' . $img . '" target="popup" ' . 'class="online-store-thumb-wrapper">' . '<img src="/a/f=getImg/w=auto/h=125/' . $img . '"/>' . '</a>'; } } } if (isset($item['url']) && !empty($item['url'])) { $c .= '<a href="' . $item['url'] . '">'; } $c .= htmlspecialchars(__FromJson($item['short_desc'])); if (isset($item['url']) && !empty($item['url'])) { $c .= '</a>'; } if (!$item['vat'] && !$user_is_vat_free) { $c .= '<sup>1</sup>'; $has_vatfree = true; } $c .= '</td>'; // } // { stock number if ($showStockNumber) { $c .= '<td class="product-stocknumber">' . $item['stock_number'] . '</td>'; } // } // { cost per item
<?php /** * find products by term * * PHP version 5.2 * * @category None * @package None * @author Kae Verens <*****@*****.**> * @license GPL 2.0 * @link http://kvsites.ie/ */ require $_SERVER['DOCUMENT_ROOT'] . '/ww.incs/basics.php'; if (!isset($_REQUEST['term']) || $_REQUEST['term'] == '') { echo '[]'; Core_quit(); } $term = $_REQUEST['term']; $rs = dbAll('select id,name from products where name like "%' . addslashes($term) . '%" or data_fields like "%' . addslashes($term) . '%" limit 20'); $res = array(); foreach ($rs as $r) { $res[] = array('id' => $r['id'], 'label' => __FromJson($r['name']), 'value' => $r['name']); } echo json_encode($res);
// add default category to product type dbQuery('alter table products_types add default_category int default 1'); $version = 31; } if ($version == 31) { // add default category to product dbQuery('alter table products add default_category int default 1'); $version = 32; } if ($version == 32) { // add link field to help with multilingual dbQuery('alter table products add link text'); $rs = dbAll('select name,id from products'); if (is_array($rs) && count($rs)) { foreach ($rs as $r) { dbQuery('update products set' . ' link="' . addslashes(__FromJson($r['name'], true)) . '"' . ' where id=' . $r['id']); } } $version = 33; } if ($version == 33) { // stock control dbQuery('alter table products add stockcontrol_details text'); dbQuery('alter table products add stockcontrol_total int default 0'); $version = 34; } if ($version == 34) { // add link column to products_categories if (!function_exists('transcribe')) { function transcribe($string) {
/** * render a page template * * @return string rendered page */ function render() { foreach ($GLOBALS['PLUGINS'] as $plugin) { if (isset($plugin['frontend']['body_override'])) { return $plugin['frontend']['body_override']($this); } } $smarty = Core_smartySetup(USERBASE . '/ww.cache/pages'); global $_languages; $fname = USERBASE . '/ww.cache/pages/template_' . md5($this->id . '|' . join(',', $_languages)); if (!file_exists($fname) || !filesize($fname)) { file_put_contents($fname, __FromJson(str_replace(array("\n", "\r"), ' ', $this->body))); } return $smarty->fetch($fname); }
return $plugin['admin']['body_override']($page, $page_vars); } } return ckeditor('body', $page['body'], null, 1); } // } // { take care of actions $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0; $parent = isset($_REQUEST['parent']) ? (int) $_REQUEST['parent'] : 0; $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ''; $msgs = ''; require_once 'pages.funcs.php'; if ($action == 'Update Page Details') { require_once $_SERVER['DOCUMENT_ROOT'] . '/ww.incs/api-admin.php'; $arr = Core_adminPageEdit(); echo '<script>window.parent.document.getElementById("page_' . $id . '")' . '.childNodes[1].innerHTML=\'<ins class="jstree-icon"> </ins>' . htmlspecialchars(__FromJson($_REQUEST['name'], true)) . '\';</script>'; } $is_an_update = $action == 'Insert Page Details' || $action == 'Update Page Details'; $edit = $is_an_update || $action == 'edit' || $id ? 1 : 0; // } // { display header and link in scripts WW_addScript('/j/js.js'); WW_addScript('/j/jquery.json-2.2.min.js'); WW_addScript('//cdn.ckeditor.com/4.4.3/standard/ckeditor.js'); WW_addScript('//cdn.ckeditor.com/4.4.3/standard/adapters/jquery.js'); WW_addInlineScript('CKEDITOR_BASEPATH="//cdn.ckeditor.com/4.4.3/standard/";'); WW_addScript('/ww.admin/j/admin.js'); // { datatables WW_addScript('//cdn.datatables.net/1.10.2/js/jquery.dataTables.min.js'); WW_addScript('/j/datatables-delay.js'); WW_addCSS('//cdn.datatables.net/1.10.2/css/jquery.dataTables.min.css');
* @package None * @author Kae Verens <*****@*****.**> * @license GPL 2.0 * @link http://kvsites.ie/ */ require $_SERVER['DOCUMENT_ROOT'] . '/ww.incs/basics.php'; if (!Core_isAdmin()) { die(__('access denied')); } if (isset($_REQUEST['get_menu'])) { $r = dbRow('select * from menus where id=' . (int) $_REQUEST['get_menu']); if ($r === false) { $r = array('parent' => 0, 'direction' => 0, 'state' => 0); } if ($r['parent'] > 0) { $r['parent_name'] = __FromJson(Page::getInstance($r['parent'])->name); } else { if ($r['parent'] == 0) { $r['parent_name'] = ' -- ' . __('none') . ' -- '; } else { $r['parent_name'] = ' -- ' . __('current page') . ' -- '; } } echo json_encode($r); Core_quit(); } if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'save') { $id = (int) $_REQUEST['id']; $id_was = $id; $parent = (int) $_REQUEST['parent']; $direction = (int) $_REQUEST['direction'];
function Menu_show($b) { WW_addScript('/j/menu.js'); global $PAGEDATA, $_languages; if (!$PAGEDATA->id) { return ''; } $md5 = md5('ww_menudisplay|' . print_r($b, true) . '|' . join(',', $_languages) . '|' . @$_SESSION['language']); $cache = Core_cacheLoad('menus', $md5); if ($cache) { return $cache; } if (is_array($b)) { $align = isset($b['direction']) && $b['direction'] == 'vertical' ? 'Left' : 'Top'; $vals = $b; } else { $arr = explode('|', $b); $b = $arr[0]; $vals = array(); if (count($arr) > 1) { $d = split(',', $arr[1]); } else { $d = array(); } foreach ($d as $e) { $f = split('=', $e); if (count($f) > 1) { $vals[$f[0]] = $f[1]; } else { $vals[$f[0]] = 1; } } $c = ''; $align = $b == 'vertical' ? 'Left' : 'Top'; } $parent = 0; $classes = ''; if (isset($vals['mode'])) { if ($vals['mode'] == 'accordian' || $vals['mode'] == 'accordion') { $classes .= ' click_required accordion'; } else { if ($vals['mode'] == 'two-tier') { $classes .= ' two-tier'; } } } else { $vals['mode'] = 'default'; } if (isset($vals['preopen_menu'])) { $classes .= ' preopen_menu'; } if (isset($vals['close']) && $vals['close'] == 'no') { $classes .= ' noclose'; } if (isset($vals['parent'])) { $r = Page::getInstanceByName($vals['parent']); if ($r) { $parent = $r->id; } } if (isset($vals['spans'])) { $vals['spans'] = (int) $vals['spans']; } else { $vals['spans'] = 1; } if ($b['type'] == 'bootstrap') { $c = '<div class="navbar"><div class="navbar-inner"><a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></a><h1><a class="brand" href="/">' . htmlspecialchars($GLOBALS['DBVARS']['site_title']) . '</a></h1><div class="nav-collapse collapse"><ul class="nav pull-right">'; } else { $c = '<div id="ajaxmenu' . $parent . '" class="menuBar' . $align . (isset($vals['nodropdowns']) && $vals['nodropdowns'] ? '' : ' ajaxmenu ') . $classes . ' parent' . $parent . '">'; } $rs = Menu_getChildren($parent, $PAGEDATA->id, 0, $parent); $links = 0; if (count($rs)) { foreach ($rs as $r) { $page = Page::getInstance($r['id']); if ($b['type'] == 'bootstrap') { $c .= '<li class="' . $r['classes'] . '"><a href="' . $page->getRelativeURL() . '"><i class="icon"></i><br>' . htmlspecialchars(__FromJson($page->name)) . '</a>' . Menu_getSubMenuBootstrap($r, $r['id']) . '</li>'; } else { if ($vals['spans']) { $spanl = '<span class="l"></span>'; $spanr = '<span class="r"></span>'; } else { $spanl = ''; $spanr = ''; } if (!$links) { $r['classes'] .= ' first'; } $c .= '<a id="ajaxmenu_link' . $r['id'] . '" class="' . $r['classes'] . '" href="' . $page->getRelativeURL() . '">' . $spanl . htmlspecialchars(__FromJson($page->name)) . $spanr . '</a>'; } $links++; } } if (!@$GLOBALS['DBVARS']['disable-hidden-sitemap']) { $c .= '<a class="menuItemTop" style="display:none" href="' . $PAGEDATA->getRelativeURL() . '?cmsspecial=sitemap">' . __('Site Map') . '</a>'; } if ($b['type'] == 'bootstrap') { $c .= '</ul></div></div>'; } else { $c .= '</div>'; } if ($vals['mode'] == 'two-tier') { $pid = $PAGEDATA->getTopParentId(); if ($pid != 2 && $pid != 3 && $pid != 17 && $pid != 32 && $pid != 33 && $pid != 34) { $pid = 2; } $rs = Menu_getChildren($pid, $PAGEDATA->id, 0, $parent); $c .= '<div id="ajaxmenu' . $pid . '" class="menu tier-two">'; if (count($rs)) { foreach ($rs as $r) { $page = Page::getInstance($r['id']); $c .= '<a id="ajaxmenu_link' . $r['id'] . '" class="' . $r['classes'] . '" href="' . $page->getRelativeURL() . '">' . $spanl . htmlspecialchars($page->name) . $spanr . '</a>'; } } else { $c .= '<a><span class="l"></span> <span class="r"></span></a>'; } $c .= '</div>'; } Core_cacheSave('menus', $md5, $c); return $c; }
/** * sends a form, or displays the form instead with errors on top * * @param array $page page db row * @param array $vars page meta data * @param array $form_fields array of fields * * @return HTML of either the result, or the form with errors on top */ function Form_send($page, $vars, $form_fields) { $c = ''; $plaintext = ''; $values = array(); $email = ''; foreach ($form_fields as $r2) { $name = preg_replace('/[^a-zA-Z0-9_]/', '', $r2['name']); $separator = "\n" . str_repeat('-', 80) . "\n"; $val = ''; switch ($r2['type']) { case 'checkbox': // { $val = @$_REQUEST[$name]; $values[$r2['name']] = $val == 'on' ? 'yes' : 'no'; if ($val == 'on') { $plaintext .= 'selected option: ' . htmlspecialchars($r2['name']) . $separator; } break; // } // } case 'date': case 'ccdate': // { $val = Core_dateM2H(@$_REQUEST[$name]); if ($r2['type'] == 'ccdate') { $val = preg_replace('#.* ([a-zA-Z]*, [0-9]+)#', "\$1", $val); } $values[$r2['name']] = $val; $plaintext .= htmlspecialchars($r2['name']) . "\n" . htmlspecialchars($val) . $separator; break; // } // } case 'email': // { $val = @$_REQUEST[$name]; $values[$r2['name']] = $val; $plaintext .= htmlspecialchars($r2['name']) . "\n" . htmlspecialchars($val) . $separator; $email = $val; break; // } // } case 'file': // { build $files array which emulates the $_FILES array // { first remove old uploads $dir = USERBASE . '/f/.files/forms/'; if (!is_dir($dir)) { break; } $fs = new DirectoryIterator($dir); $time = time(); foreach ($fs as $f) { if ($f->isDot()) { continue; } if ($f->isDir()) { $diff = $time - $f->getMTime(); if ($diff > 600) { // file is older than 10 minutes CoreDirectory::delete($f->getPathname()); } } } // } $session_id = session_id(); $dir .= $session_id; if (!is_dir($dir)) { break; } $_FILES = array(); $uploads = new DirectoryIterator($dir); foreach ($uploads as $upload) { if ($upload->isDot() || $upload->isDir()) { continue; } array_push($_FILES, array('name' => $upload->getFileName(), 'type' => mime_content_type($upload->getPathname()), 'tmp_name' => $upload->getPathname(), 'error' => 0, 'size' => $upload->getSize())); } break; // } // } case 'html-block': case 'next-page-link': case 'previous-page-link': case 'page-break': // { not inputs - don't add them break; // } // } default: // { $val = @$_REQUEST[$name]; $values[$r2['name']] = $val; $val = nl2br($val); $plaintext .= htmlspecialchars($r2['name']) . "\n" . htmlspecialchars($val) . $separator; // } } } $from_field = preg_replace('/[^a-zA-Z]/', '', $vars['forms_replyto']); $from = isset($_REQUEST[$from_field]) ? $_REQUEST[$from_field] : ''; if (@$vars['forms_create_user']) { $id = dbOne('select id from user_accounts where email="' . addslashes($email) . '"', 'id'); if (!$id) { dbQuery('insert into user_accounts set email="' . addslashes($email) . '",' . 'extras="' . addslashes(json_encode($values)) . '"'); $id = dbLastInsertId(); if (isset($_FILES) && count($_FILES)) { @mkdir(USERBASE . '/f/user-files'); @mkdir(USERBASE . '/f/user-files/' . $id); foreach ($_FILES as $file) { copy($file['tmp_name'], USERBASE . '/f/user-files/' . $id . '/' . $file['name']); } } } } if ($vars['forms_send_as_email']) { $form = Form_readonly($page['id'], $vars, $form_fields); $to = $vars['forms_recipient']; $form = str_replace(array('<input type="submit" value="' . __('Submit Form') . '" />', '<form action="' . $_SERVER['REQUEST_URI'] . '" method="post" ' . 'class="ww_form" enctype="multipart/form-data">', '</form>'), '', $form); cmsMail($to, $from, $_SERVER['HTTP_HOST'] . ' ' . __FromJson($page['name']), '<html><head></head><body>' . $form . '</body></html>', $_FILES); if (is_dir(USERBASE . '/f/.files/forms/' . session_id())) { // remove uploaded files CoreDirectory::delete(USERBASE . '/f/.files/forms/' . session_id()); } } if ($vars['forms_record_in_db']) { Form_saveValues($page['id'], $form_fields); } $c .= '<div id="thankyoumessage">' . $vars['forms_successmsg'] . '</div>'; return $c; }
/** * output an RTE's HTML * * @param string $name name of the textarea to replace * @param string $value prefill the textarea with this value * @param int $height the height of the RTE to show * @param int $translatable is this editor a multi-lingual one * * @return string the HTML of the RTE */ function ckeditor($name, $value = '', $height = 250, $translatable = 0) { if (!$translatable) { return '<textarea style="width:100%;height:' . $height . 'px" name="' . addslashes($name) . '">' . htmlspecialchars($value) . '</textarea>' . "<script>//<![CDATA[\n" . '$(function(){window.ckeditor_' . preg_replace('/[^a-zA-Z_]/', '', $name) . '=CKEDITOR.replace("' . str_replace(array('[', ']'), array('\\[', '\\]'), addslashes($name)) . '",CKEditor_config);});' . "//]]></script>"; } global $langs, $tabindex; if (count($langs) < 2) { $lang = $langs[0]; $v2 = __FromJson($value, true, $lang['code']); return '<textarea style="width:100%;height:' . $height . 'px" name="' . addslashes($name) . '[' . $lang['code'] . ']">' . htmlspecialchars($v2) . '</textarea>' . "<script>//<![CDATA[\n" . '$(function(){window.ckeditor_' . preg_replace('/[^a-zA-Z_]/', '', $name . '_' . $lang['code']) . '=CKEDITOR.replace("' . str_replace(array('[', ']'), array('\\[', '\\]'), addslashes($name . '[' . $lang['code'] . ']')) . '",CKEditor_config);});' . "//]]></script>"; } if (!$tabindex) { $tabindex = time(); } $html = '<div class="tabs mini-tabs"><ul>'; foreach ($langs as $lang) { $html .= '<li><a href="#tab-' . $tabindex . '-' . $lang['code'] . '">' . $lang['name'] . '</a></li>'; } $html .= '</ul>'; foreach ($langs as $lang) { $v2 = __FromJson($value, true, $lang['code']); $html .= '<div id="tab-' . $tabindex . '-' . $lang['code'] . '">' . '<textarea style="width:100%;height:' . $height . 'px" name="' . addslashes($name) . '[' . $lang['code'] . ']">' . htmlspecialchars($v2) . '</textarea>' . "<script>//<![CDATA[\n" . '$(function(){window.ckeditor_' . preg_replace('/[^a-zA-Z_]/', '', $name . '_' . $lang['code']) . '=CKEDITOR.replace("' . str_replace(array('[', ']'), array('\\[', '\\]'), addslashes($name . '[' . $lang['code'] . ']')) . '",CKEditor_config);});' . "//]]></script>" . '</div>'; } $html .= '</div>'; $tabindex++; return $html; }
function Products_filter() { if (!isset($_REQUEST['term']) || $_REQUEST['term'] == '') { return array(); } $term = $_REQUEST['term']; $hash = 'search|' . md5($term); $res = Core_cacheLoad('products', $hash, -1); if ($res === -1) { $rs = dbAll('select id,name from products where (name like "%' . addslashes($term) . '%"' . ' or data_fields like "%' . addslashes($term) . '%")' . ' and enabled limit 20'); $res = array(); foreach ($rs as $r) { $res[] = array('url' => Product::getInstance($r['id'])->getRelativeUrl(), 'name' => __FromJson($r['name'])); } Core_cacheSave('products', $hash, $res); } return $res; }
/** * get list of contained directories * * @param int $i ID of the parent page * @param int $n indentation level * @param int $id ID of a page /not/ to show * * @return array */ function selectkiddies($i = 0, $n = 1, $id = 0) { $arr = array(); $q = dbAll('select name,id,alias from pages where parent="' . $i . '" and id!="' . $id . '" order by ord,name'); if (count($q) < 1) { return $arr; } foreach ($q as $r) { if ($r['id'] != '') { $arr[' ' . $r['id']] = str_repeat('» ', $n) . __FromJson($r['name']); $arr = array_merge($arr, selectkiddies($r['id'], $n + 1, $id)); } } return $arr; }
/** * get issue overviews * * @return array */ function Issuetracker_issuesGetDT() { $pid = (int) $_REQUEST['pid']; $start = (int) $_REQUEST['iDisplayStart']; $length = (int) $_REQUEST['iDisplayLength']; $search = $_REQUEST['sSearch']; $orderby = (int) $_REQUEST['iSortCol_0']; $orderdesc = $_REQUEST['sSortDir_0'] == 'desc' ? 'desc' : 'asc'; switch ($orderby) { case 1: $orderby = 'due_date'; break; case 2: $orderby = 'status'; break; case 3: $orderby = 'name'; break; default: $orderby = 'due_date'; } $filters = array('issuetracker_issues.project_id=issuetracker_projects.id', '((due_date>="' . addslashes($_REQUEST['date-from']) . '"' . ' and due_date<"' . addslashes($_REQUEST['date-to']) . ' 24")' . ' or due_date="0000-00-00")'); if ($search) { $filters[] = 'name like "%' . addslashes($search) . '%"'; } if ($pid) { $filters[] = 'project_id=' . $pid; } $filter = ''; if (!Core_isAdmin()) { // check projects for restrictions $projects = dbAll('select id, name, groups, users from issuetracker_projects', 'id'); $allowed_projects = array(0); foreach ($projects as $p) { if (strlen($p['groups']) > 1) { if (!isset($_SESSION['userdata'])) { continue; } $ok = 0; foreach ($_SESSION['userdata']['groups'] as $k => $v) { if (strpos($p['groups'], '|' . $v . '|') !== false) { $ok = 1; } } if (!$ok) { continue; } } if (strlen($p['users']) > 1) { if (!isset($_SESSION['userdata'])) { continue; } if (strpos($p['users'], '|' . $_SESSION['userdata'] . '|') === false) { continue; } } $allowed_projects[] = $p['id']; } $filters[] = 'issuetracker_projects.id in (' . join(',', $allowed_projects) . ')'; } if (count($filters)) { $filter = 'where (' . join(') and (', $filters) . ')'; } $sql = 'select issuetracker_issues.id id' . ', type_id, issuetracker_issues.name name, status, project_id' . ', issuetracker_projects.name project_name' . ', issuetracker_issues.meta meta, due_date' . ' from issuetracker_issues,issuetracker_projects ' . $filter . ' order by ' . $orderby . ' ' . $orderdesc . ' limit ' . $start . ',' . $length; $rs = dbAll($sql); $result = array(); $result['sEcho'] = intval($_GET['sEcho']); $result['iTotalRecords'] = dbOne('select count(id) as ids from issuetracker_issues', 'ids'); $result['iTotalDisplayRecords'] = dbOne('select count(issuetracker_issues.id) as ids' . ' from issuetracker_issues, issuetracker_projects ' . $filter, 'ids'); $arr = array(); foreach ($rs as $r) { $row = array(); $rMeta = json_decode($r['meta']); // { id $row[] = $r['id']; // } // { due_date $row[] = $r['due_date']; // } // { status $row[] = (int) $r['status']; // } // { name $row[] = __FromJson($r['name']); // } // { type $row[] = (int) $r['type_id']; // } // { project $row[] = $r['project_name']; $freeCredits = $rMeta->{'credits'}; $paidCredits = $rMeta->{'paid_credits'}; $metaArray = array(); $metaFlag = false; if ($freeCredits == null) { // initialise the meta for the first time $metaArray['credits'] = 0; $metaFlag = true; } else { $metaArray['credits'] = $rMeta->{'credits'}; } if ($paidCredits == null) { //same thing here $metaArray['paid_credits'] = 0; $metaFlag = true; } else { $metaArray['paid_credits'] = $rMeta->{'paid_credits'}; } if ($metaFlag) { $sql = 'update issuetracker_issues set meta="' . json_encode($metaArray) . '" where id=' . $r['id']; dbQuery($sql); } $row[] = $rMeta->{'credits'} != null ? $rMeta->{'credits'} : 0; // } $arr[] = $row; } $result['aaData'] = $arr; return $result; }
$c .= '<select id="online_store_quickpay_redirect_to" name="page_vars[online_' . 'store_quickpay_redirect_to]">'; if (isset($vars['online_store_quickpay_redirect_to']) && $vars['online_store_quickpay_redirect_to']) { $parent = Page::getInstance($vars['online_store_quickpay_redirect_to']); $c .= '<option value="' . $parent->id . '">' . htmlspecialchars(__FromJson($parent->name)) . '</option>'; } else { $vars['online_store_quickpay_redirect_to'] = 0; $c .= '<option value="0"> -- ' . __('None') . ' -- </option>'; } $c .= '</select></td></tr>'; // } // { redirect page (failed) $c .= '<tr><th>' . __('Redirect after cancelled/failed payment') . '</th><td>'; $c .= '<select id="online_store_quickpay_redirect_failed" name="page_vars[onl' . 'ine_store_quickpay_redirect_failed]">'; if (isset($vars['online_store_quickpay_redirect_failed']) && $vars['online_store_quickpay_redirect_failed']) { $parent = Page::getInstance($vars['online_store_quickpay_redirect_failed']); $c .= '<option value="' . $parent->id . '">' . htmlspecialchars(__FromJson($parent->name)) . '</option>'; } else { $vars['online_store_quickpay_redirect_failed'] = 0; $c .= '<option value="0"> -- ' . __('None') . ' -- </option>'; } $c .= '</select></td></tr>'; // } // { autocapture $c .= '<tr><th>' . __('Autocapture') . '</th><td>' . '<select name="page_vars[online_stores_quickpay_autocapture]">' . '<option value="0">' . __('No') . '</option>' . '<option value="1"'; if (@$vars['online_stores_quickpay_autocapture'] == '1') { $c .= ' selected="selected"'; } $c .= '>' . __('Yes') . '</option></select></td></tr>'; // } // { test mode $c .= '<tr><th>' . __('Mode') . '</th><td>' . '<select name="page_vars[online_stores_quickpay_testmode]">' . '<option value="test">' . __('Test Mode') . '</option>' . '<option value="live"';
} if (!$ok) { continue; } break; // } // } case 'selected-image': // { $v = 'http://' . $_SERVER['HTTP_HOST'] . '/kfmget/' . $v; $long_desc = '<img style="float:left" src="' . $v . ',width=60,height=60"/>'; break; // } } $vals[] = '<div class="products-desc-' . preg_replace('/[^a-zA-Z0-9]/', '', $k) . '">' . '<span class="__">' . $n . '</span>: ' . $v . '</div>'; } } if (count($vals)) { $long_desc .= join("\n", $vals) . '<br style="clear:left"/>'; $md5 = ',' . md5($long_desc . 'products_' . $id); } // } list($price, $amount, $vat) = Products_getProductPrice($product, $amount, $md5); if (isset($_REQUEST['products_values__custom-price']) && (double) $_REQUEST['products_values__custom-price'] && $product_type->has_userdefined_price) { $price = (double) $_REQUEST['products_values__custom-price']; } // { does the amount requested bring it over the maximum allowed per purchase $max_allowed = isset($product->vals['os_amount_allowed_per_purchase']) ? (int) $product->vals['os_amount_allowed_per_purchase'] : 0; // } OnlineStore_addToCart($price + $price_amendments, $amount, __FromJson($product->get('name')), $long_desc, 'products_' . $id . $md5, isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'no referer', $vat, $id, (int) @$product->vals['os_free_delivery'], (int) @$product->vals['os_not_discountable'], $max_allowed, $product->stock_number);
} else { $c .= __('No'); } break; // } // } case 'textarea': // { $c .= __FromJson($product->vals[$data->n]); break; // } // } default: // { if (isset($product->vals[$data->n])) { $c .= htmlspecialchars(__FromJson($product->vals[$data->n])); } else { $c .= ' '; } // } } $c .= '</td></tr>'; } } else { $c .= '<thead>'; $c .= '<tr>'; foreach ($datafields as $data) { $name = $data->ti ? $data->ti : ucwords(str_replace('_', ' ', $data->n)); $c .= '<th>' . htmlspecialchars(ucfirst($name)) . '</th>'; } $c .= '</tr>';
/** * produce a HTML version of the product * * @param string $product the product to render * @param string $template multi-view product or single-view? * @param boolean $add_wrapper wrap in div.products-product before return * * @return string html of the product */ function render($product, $template = 'singleview', $add_wrapper = true) { global $DBVARS, $PAGEDATA; $GLOBALS['products_template_used'] = $template; if (isset($DBVARS['online_store_currency'])) { $csym = $DBVARS['online_store_currency']; } $smarty = Products_setupSmarty(); $smarty->assign('product', $product); $smarty->assign('product_id', $product->get('id')); $smarty->assign('_name', __FromJson($product->name)); $smarty->assign('_stock_number', $product->stock_number); if (!is_array(@$this->data_fields)) { $this->data_fields = array(); } $productVals = array(); foreach ($this->data_fields as $f) { $f->n = preg_replace('/[^a-zA-Z0-9\\-_]/', '_', $f->n); $val = $product->get($f->n); $required = @$f->r ? ' required' : ''; switch ($f->t) { case 'checkbox': // { $val = $val ? __('Yes') : __('No'); $smarty->assign($f->n, $val); break; // } // } case 'colour': // { if (@$f->u) { // user-definable WW_addScript('/j/mColorPicker/mColorPicker.js'); $h = '<input class="color-picker" ' . 'name="products_values_' . $f->n . '" ' . 'style="height:20px;width:20px;" ' . 'value="' . htmlspecialchars($val) . '" ' . 'data-text="hidden"/>' . '<style>#mColorPickerFooter,#mColorPickerImg{display:none}</style>'; WW_addInlineScript('$(".color-picker")' . '.mColorPicker({"imageFolder":"/j/mColorPicker/images/"});'); } else { $h = 'TODO'; } $smarty->assign($f->n, $h); break; // } // } case 'date': // { if (@$f->u) { // user-definable $smarty->assign($f->n, '<input class="product-field date ' . $f->n . $required . '" name="' . 'products_values_' . $f->n . '"/>'); $format = @$f->e ? $f->e : 'yy-mm-dd'; $y = date('Y'); WW_addInlineScript('$("input[name=products_values_' . $f->n . ']").datepicker({' . '"dateFormat":"' . $format . '",' . 'changeYear:true,changeMonth:true,yearRange:"1900:' . $y . '"' . '});'); WW_addInlineScript('$("input.hasDatepicker").each(function() {' . 'if (this.value!="") return;' . '$(this).datepicker("setDate", "+0");' . '});'); } else { $val = Core_dateM2H($val); $smarty->assign($f->n, $val); } break; // } // } case 'hidden': // { $smarty->assign($f->n, '<input type="hidden" name="products_values_' . $f->n . '" value="' . htmlspecialchars($val) . '"/>'); break; // } // } case 'selectbox': // { if (@$f->u) { $valid_entries = explode("\n", $val); foreach ($valid_entries as $k => $v) { $v = trim($v); if ($v == '') { unset($valid_entries[$k]); } else { $valid_entries[$k] = $v; } } if (!count($valid_entries)) { $valid_entries = explode("\n", $f->e); } $h = '<select name="products_values_' . $f->n . '" class="' . $required . '">'; $translateable = @$f->tr && 1; foreach ($valid_entries as $e) { $e = trim($e); if ($e == '' || !in_array($e, $valid_entries)) { continue; } $o = $e; $p = ''; if (strpos($e, '|') !== false) { $bits = explode('|', $e); $e = $bits[0]; $p = 'price="' . (int) $bits[1] . '"'; } $h .= '<option ' . $p . ' value="' . htmlspecialchars($o) . '"'; if ($translateable) { $h .= ' class="__"'; } $h .= '>' . htmlspecialchars($e) . '</option>'; } $h .= '</select>'; } else { $val = preg_replace('/\\|.*/', '', $val); $h = $val; } $smarty->assign($f->n, $h); break; // } // } case 'selected-image': // { $smarty->assign($f->n, '<input type="hidden" name="products_values_' . $f->n . '" ' . 'class="product-field ' . $f->n . $required . '"/>'); break; // } // } case 'textarea': // { textarea if (@$f->u) { $val = trim(preg_replace('/<[^>]*>/', '', $val)); $smarty->assign($f->n, '<textarea class="product-field ' . $f->n . $required . '" name="products_values_' . $f->n . '">' . htmlspecialchars($val) . '</textarea>'); } else { $smarty->assign($f->n, $val); } break; // } // } case 'user': // { $u = User::getInstance($val, false, false); $val = $u ? $u->get('name') : 'no name'; $smarty->assign($f->n, $val); break; // } // } default: // { everything else if (@$f->u) { $smarty->assign($f->n, '<input class="product-field ' . $f->n . $required . '" value="' . htmlspecialchars($val) . '" name="products_values_' . $f->n . '"/>'); } else { $smarty->assign($f->n, $val); } // } } $productVals[$f->n] = $val; $PAGEDATA->title = str_replace('{{$' . $f->n . '}}', $val, $PAGEDATA->title); } if (isset($PAGEDATA->vars['products_pagedescriptionoverride']) && $PAGEDATA->vars['products_pagedescriptionoverride']) { $desc = preg_replace('/<[^>]*>/', '', $productVals['description']); $desc = trim(preg_replace('/\\s+/m', ' ', $desc)); $PAGEDATA->description = substr($desc, 0, 153) . '...'; } if (isset($product->ean)) { $smarty->assign('_ean', $product->ean); } // { $_name, $_stock_number, $_ean $PAGEDATA->title = str_replace(array('{{$_name}}', '{{$_stock_number}}', '{{$_ean}}'), array($product->get('_name'), $product->get('_stock_number'), $product->vals['ean']), $PAGEDATA->title); // } $html = ''; if ($add_wrapper) { $classes = array('products-product'); if ($this->stock_control) { $classes[] = 'stock-control'; } $html .= '<div class="' . join(' ', $classes) . '" id="products-' . $product->get('id') . '">'; } $html .= $smarty->fetch(USERBASE . '/ww.cache/products/templates/types_' . $template . '_' . $this->id); if ($template == 'singleview') { $PAGEDATA->vars['header_html'] = (isset($PAGEDATA->vars['header_html']) ? $PAGEDATA->vars['header_html'] : '') . '<link rel="canonical" href="' . htmlspecialchars($product->getRelativeUrl()) . '" />'; if ($this->allow_comments) { $html .= Core_commentsShow('http://' . $_SERVER['HTTP_HOST'] . $product->getRelativeURL()); } } if ($add_wrapper) { $html .= '</div>'; } return $html; }
/** * get a list of products in datatables format * * @return array products list */ function Products_adminProductsListDT() { $start = (int) $_REQUEST['iDisplayStart']; $length = (int) $_REQUEST['iDisplayLength']; $search = $_REQUEST['sSearch']; $orderbyNum = (int) $_REQUEST['iSortCol_0']; $orderdesc = $_REQUEST['sSortDir_0'] == 'desc' ? 'desc' : 'asc'; $GLOBALS['product_columns'] = array(); Core_trigger('extra-products-columns'); global $product_columns; switch ($orderbyNum) { case 2: $orderby = 'name'; break; case 3: $orderby = 'stock_number'; break; case 6: $orderby = 'id'; break; case 7: $orderby = 'enabled'; break; case 8: $orderby = 'date_created'; break; case 9: $orderby = 'date_edited'; break; default: $orderby = 'name'; } if ($orderbyNum > 9 && isset($product_columns[$orderbyNum - 10]['field_name'])) { $orderby = $product_columns[$orderbyNum - 10]['field_name']; } $filters = array(); if ($search) { $sArr = array(); $sArr[] = 'match(data_fields,name) against ("' . addslashes($search) . '" in boolean mode)'; $filters[] = '(' . join(' and ', $sArr) . ')'; # .' or stock_number like "%'.addslashes($search).'%")'; } $filter = ''; if (count($filters)) { $filter = 'where ' . join(' and ', $filters); } $sql = 'select id, user_id, images_directory, name, stock_number, enabled' . ', date_created, date_edited, stockcontrol_total'; foreach ($product_columns as $p) { if (isset($p['field_name'])) { $sql .= ', ' . $p['field_name']; } } $sql .= ' from products ' . $filter . ' order by ' . $orderby . ' ' . $orderdesc . ' limit ' . $start . ',' . $length; $rs = dbAll($sql, '', 'products'); $result = array(); $result['sql'] = $sql; $result['sEcho'] = intval($_GET['sEcho']); $result['iTotalRecords'] = dbOne('select count(id) as ids from products', 'ids', 'products'); $result['iTotalDisplayRecords'] = dbOne('select count(id) as ids from products ' . $filter, 'ids', 'products'); $arr = array(); foreach ($rs as $r) { $row = array(0); // { has images $has_images = 0; if ($r['images_directory'] && @is_dir(USERBASE . '/f/' . $r['images_directory'])) { $dir = new DirectoryIterator(USERBASE . '/f/' . $r['images_directory']); foreach ($dir as $f) { if ($f->isDot()) { continue; } if ($f->isFile()) { $has_images++; } } } $row[] = $has_images; // } // { name $row[] = __FromJson($r['name']); // } // { stock_number $row[] = $r['stock_number']; // } // { stock_control $row[] = $r['stockcontrol_total']; // } // { owner $user = User::getInstance($r['user_id'], false, false); $row[] = $r['user_id'] . '|' . ($user ? $user->get('name') : 'unknown owner'); // } // { id $row[] = $r['id']; // } // { enabled $row[] = $r['enabled']; // } // { created date $row[] = $r['date_created']; // } // { last edit $row[] = $r['date_edited']; // } foreach ($product_columns as $p) { if (isset($p['field_name'])) { $row[] = $r[$p['field_name']]; } else { $row[] = 'TODO'; } } $arr[] = $row; } $result['aaData'] = $arr; return $result; }
// { related items if (count($relations)) { echo '<h2>' . __('Relations') . '</h2><div id="relations">' . '<table id="product-relations"><tr><th>Relation Type</th><th>Related P' . 'roduct</th></tr>'; foreach ($relations as $relation) { $ps = dbAll('select * from products_relations where relation_id=' . $relation['id'] . ' and from_id=' . $id); $options = '<option value=""> -- ' . __('Choose') . ' -- </option>'; foreach ($relations as $r) { $options .= '<option value="' . $r['id'] . '"'; if ($r['id'] == $relation['id']) { $options .= ' selected="selected"'; } $options .= '>' . htmlspecialchars($r['name']) . '</option>'; } foreach ($ps as $p) { echo '<tr><td><select name="product-relations-type[]">' . $options . '</select></td><td><select class="products-relations-product"' . ' name="products-relations-product[]">' . '<option value="' . $p['to_id'] . '">'; echo htmlspecialchars(__FromJson(dbOne('select name from products where id=' . $p['to_id'], 'name'))) . '</option></select></td></tr>'; } } echo '<tr><td><select name="product-relations-type[]">' . '<option value=""> -- ' . __('Choose') . ' -- </option>'; foreach ($relations as $relation) { echo '<option value="' . $relation['id'] . '">' . htmlspecialchars($relation['name']) . '</option>'; } echo '</select></td>' . '<td><select class="products-relations-product"' . ' name="products-relations-product[]">' . '<option value=""> -- ' . __('Choose') . ' -- </option></select>'; WW_addScript('products/admin/products-edit-related.js'); echo '</td></tr></table></div>'; } // } // { end form and tabs echo '</div><input type="submit" value="' . __('Save') . '" /></form>'; // } WW_addScript('products/admin/products-edit.js');